forked from ufs-community/ufs-srweather-app
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FV3LAM_wflow.xml
88 lines (75 loc) · 2.86 KB
/
FV3LAM_wflow.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
{%- macro dependency_tree(dep_dict) %}
{%- if dep_dict is mapping %}
{%- for tag, values in dep_dict.items() %}
{%- set tag_type = tag.split("_")[0] %}
{%- if values is mapping %}
<{{ tag_type -}} {% for attr, val in values.pop("attrs", {}).items() %} {{ attr }}="{{ val }}"{%- endfor -%}{%- if tag_type in ["taskdep", "metataskdep", "taskvalid"] %}/{%- endif %}>
{%- if values.get("text") %}
{{ values.pop("text") }}
</{{ tag_type }}>
{%- elif values %}
{{- dependency_tree(values)|indent(2) }}
</{{ tag_type }}>
{%- endif %}
{%- else %}
<{{ tag_type|indent(2) -}}>
{{- values -}}
</{{ tag_type|indent(2) }}>
{%- endif %}
{%- endfor %}
{%- endif %}
{%- endmacro -%}
{%- macro task(name, settings) %}
<task name="{{name}}" {% for attr, val in settings.get("attrs", {}).items() %}{{ attr }}="{{ val }}" {% endfor %}>
{%- for key, value in settings.items() -%}
{%- if key not in ["envars", "attrs", "dependency", "nnodes", "ppn"] %}
<{{ key }}>{{ value }}</{{ key }}>
{%- endif %}
{%- endfor %}
{% for var, value in settings.get("envars", {}).items() %}
<envar><name>{{ var }}</name><value>{{ value }}</value></envar>
{%- endfor %}
{% if settings.get("dependency") -%}
<dependency>
{{- dependency_tree(dep_dict=settings.get("dependency")) }}
</dependency>
{%- endif %}
</task>
{%- endmacro -%}
{%- macro metatask(name, settings) %}
<metatask name="{{name}}" {% for attr, val in settings.get("attrs", {}).items() %}{{ attr }}="{{ val }}" {% endfor %}>
{% for varname, value in settings.get("var", {}).items() %}
<var name="{{ varname }}">{{ value }}</var>
{%- endfor %}
{%- for item, task_settings in settings.items() %}
{%- if item.split("_", 1)[0] == "task" %}
{%- if task_settings.get("command") %}
{{ task(name=item.split("_", 1)[-1], settings=task_settings)|indent(2) }}
{%- endif %}
{%- elif item.split("_", 1)[0] == "metatask" %}
{{ metatask(name=item.split("_", 1)[-1], settings=task_settings)|indent(2) }}
{%- endif %}
{%- endfor %}
</metatask>
{%- endmacro -%}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow [
{%- for entity, value in entities.items() %}
<!ENTITY {{ entity }} "{{ value }}">
{%- endfor %}
]>
<workflow {% for attr, val in attrs.items() %}{{ attr }}="{{ val }}" {% endfor %}>
{%- for group, cdefs in cycledefs.items() %}
{%- for cdef in cdefs %}
<cycledef group="{{ group }}">{{ cdef }}</cycledef>
{%- endfor %}
{%- endfor %}
<log>{{ log }}</log>
{%- for item, settings in tasks.items() %}
{%- if item.split("_", 1)[0] == "task" %}
{{ task(name=item.split("_", 1)[-1], settings=settings ) }}
{%- elif item.split("_", 1)[0] == "metatask" %}
{{ metatask(name=item.split("_", 1)[-1], settings=settings ) }}
{%- endif %}
{%- endfor %}
</workflow>