ecFlow's documentation is now on readthedocs!

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 24 Next »

Let’s add another task named t2.
You will need to modify the suite definition file and add a new script.

You must also create a file t2.ecf in $HOME/course/test. Simply copy t1.ecf.

First modify the suite definition

Text

It is good practice to suspend your suite before you reload any part of it.
In ecflowview right click on the suite and select “Suspend”.
Once you made your change(specified below) you can right click on the suite and “Resume” it.
# Definition of the suite test
suite test
   edit ECF_HOME "$HOME/course"  # replace '$HOME' with the path to your home directory
   task t1
   task t2
endsuite

As before replace $HOME with the real path to your home directory.

Then you must load the file again:

> ecflow_client --load test.def

Warning

This will fail because the suite is already loaded

Because the suite is already defined, you need to delete and reload it first:

> ecflow_client --delete=_all_
> ecflow_client --load=test.def

Then restart the suite:

> ecflow_client --begin=test
Rather than deleting, loading and beginning the suite every time you can replace
all or part of the suite for example to replace whole suite.
> ecflow_client --replace /test test.def

or to replace part of the suite:

> ecflow_client --replace /test/t2 test.def

Python

To delete the suite definition, reload and begin using the client server python API: First update test.def

#!/usr/bin/env python2.7
import os
import ecflow 
   
print "Creating suite definition"   
defs = ecflow.Defs()
suite = defs.add_suite("test")
suite.add_variable("ECF_HOME", os.getenv("HOME") + "/course")
suite.add_task("t1")
suite.add_task("t2")
print 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")

To delete all suites in the server and reload modified test.def, we could update client.py

#!/usr/bin/env python2.7
import ecflow 
   
print "Client -> Server: delete, then load a new definition"   
try:
    ci = ecflow.Client() 
    ci.delete_all()           # clear out the server
    ci.load("test.def")       # load the definition into the server
    ci.begin_suite("test")    # start the suite
except RuntimeError, e:
    print "Failed: " + str(e)
    
Rather than deleting, loading and beginning the suite every time you can replace
all or part of the suite. (i.e. to replace the whole suite see below)
Additionally we do not want the suite to start straight away. This can be done
by suspending the suite in ecflowview before reloading.
However we will need to remember to do this, each time. To get round this we will
suspend the suite use the client server python API:
Modify client.py with:
#!/usr/bin/env python2.7
import ecflow 
   
print "Client -> Server: replacing suite '/test' in the server, with a new definition"   
try:
    ci = ecflow.Client()
    ci.suspend("/test")              # so that we can resume manually in ecflowview
    ci.replace("/test", "test.def")     
except RuntimeError, e:
    print "Failed: " + str(e)
    

Note

For brevity the examples that follow, will not show the loading of the suite.

What to do:

  1. Suspend the suite using ecflowview or via python using ecflow.Client.suspend
  2. Create the new task
  3. Create t2.ecf by copying from t1.ecf
  4. Update python scripts test.py and client.py or test.def
  5. Replace the suite
  6. Resume the the suite using ecflowview
  7. In ecflowview, watch the two task running. They should run at the same time
  • No labels