Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/FamiliesAdd+Manual
Button Hyperlink
titleUp
typestandard
urlhttps://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further
Button Hyperlink
titleNext
typestandard
urlhttps://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Variable+inheritance


We already saw that ecFlow has some variable‘s, like ECF_HOME.
There are three kinds of variables:
  • The variables that are used by ecFlow, like ECF_HOME, ECF_INCLUDE

  • The variables that are defined by the user.
    They should not start with “ECF”.
    It is good practice to name these variables with capital letters.
  • The variables that are generated by ecFlow, and that you can use in
    your jobs, like ECF_DATE which contains the date of the suite.

 


Ecf Script

In the previous example, we have copied the file t1.ecf to the file t2.ecf.

Edit those two files so they call the unix UNIX sleep command with a user variable called SLEEP as a parameter.


 

Code Block
languagebash
title$HOME/course/f1/t1.ecf
%include <head.h>
echo "I will now sleep for %SLEEP% seconds"
sleep %SLEEP%
%include <tail.h>

 


Text

Then add the variable to the suite definition:

Code Block
# Definition of the suite test.
suite test
   edit ECF_INCLUDE "$HOME/course"   # replace '$HOME' with the path to your home directory
   edit ECF_HOME    "$HOME/course"
   family f1
      task t1
         edit SLEEP 20
      task t2
         edit SLEEP 20
   endfamily
endsuite
 

Python

Python

#!/usr/bin/env python2.7
Code Block
languagepy
title$HOME/course/test.py
import os
from ecflow import 
ecflow
Defs,Suite,Family,Task,Edit

def create_family_f1():
    
f1
return 
= ecflow.
Family("f1"
 )
,
                
f1.add_task
Task("t1"
).add_variable("SLEEP", 20)
,Edit(SLEEP=20)),
    
f1.add_task
            Task("t2"
).add_variable("SLEEP", 20) return f1 print
,Edit(SLEEP=20)))

 
print("Creating suite definition"
defs = ecflow.Defs(
)
suite
home =
defs.add_suite("test") suite.add_variable("ECF_INCLUDE",
 os.path.join(os.getenv("HOME"),
 
 "course")
) suite.add_variable("ECF_HOME

defs = Defs(
        Suite("test", 
   
os.path.join(os.getenv("HOME"), "course")) suite.add_family(
         Edit(ECF_INCLUDE=home,ECF_HOME=home),
            create_family_f1()
)
))         
print(defs) 
defs


print
("Checking job creation: .ecf -> .job0")  
print
(defs.check_job_creation())

print
("Saving definition to file 'test.def'")
defs.save_as_defs("test.def")

What to do

  1. Do the modifications
  2. Replace the suite
    python: python python3 test.py
                 python python3 client.py
    text:             ecflow_client --suspend=/test ;  ecflow_client --replace=/test test.def
  3. Watch in ecflow_ui . You should see the tasks with a status active for 20 second. Look at the job output.
     
Horizontal Navigation Bar


Button Group

Button Hyperlink
titlePrevious
typestandard
urlhttps://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/FamiliesAdd+Manual
Button Hyperlink
titleUp
typestandard
urlhttps://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further
Button Hyperlink
titleNext
typestandard
urlhttps://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Variable+inheritance

 

...