Workflows are written using XML markup language. This XML has no fixed structure but instead XML tags are translated into Python function calls. Thus such XML can be considered as a simplified programming language.

Consider the following XML fragment:

 <func arg1="value1" arg2="value2" /> 

This is an equivalent to func(arg1='value1', arg2='value2') in Python. Tag name is mapped to a function name, one that Murano Conductor knows. Each attribute corresponds to function argument.

XML functions may also have a body. It is evaluated to "body" argument. Thus

    <func arg1="value1" arg2="value2">some text</func>
 

is translated to func(arg1='value1', arg2='value2', body='some text')

In example above all function arguments were constant values. But they also can be evaluated:

    <foo arg="value">
        <bar/>
    </foo>
             

turns to

    body_value = bar()
    foo(arg='value', body=body_value)
            

Tag body may consist of several function invocations. In such case all values would be concatenated. For example if

    def foo(**kwargs):
      return "foo"

    def bar(**kwargs):
      return "bar"
            

then <func><foo/> - <bar/></func> will result in func(body = 'foo - bar')

Function parameters can also be function calls using <parameter> tag

    <foo arg="value"/>

can be rewritten as

    <foo>
        <parameter name="arg">value</parameter>
    </foo>

while that later form is more verbose it allows having dynamically evaluated values as function arguments:

    <foo>
        <parameter name="arg"><bar/></parameter>
    </foo>

Functions may also have other custom tags in their body that interpreted in a way different from plain function invocation.

loading table of contents...