Greetings,
I have a workflow definition where I would like to generate the name of
the workflow dynamically. Say you have a workflow that can operate on
hundreds of different sources. It would be benefitial if one could set
the name of the workflow to be $applicationName_$source instead of
simply $applicationName. In this case I thought that a simple variable
substitution would've worked, meaning:
<workflow-app name="my_application" xmlns="uri:oozie:workflow:0.5">
Could then be set to be:
<workflow-app name=${dynamically_generated_wf_name}
xmlns="uri:oozie:workflow:0.5">
Or
<workflow-app name="${dynamically_generated_wf_name}"
xmlns="uri:oozie:workflow:0.5">
However this doesn't work. In the first case launching the workflow
simply fails, I assume due to the missing quotes in the name parameter
inside the <workflow-app> element. In the second case the workflow name
appears as the literal string ${dynamically_generated_wf_name}, so it's
obvious that variable substitution is not being performed in that element.
The obvious approach to this would be to manually do the substitution on
the XML template with a script and then place that in the HDFS path
where the XML file normally resides, however this approach implies more
work if the actual workflow is to be launched many times in parallel for
different parameters and with different names. In that case one would
have to place multiple XML files in different locations in the HDFS
which becomes a bit of a pain. At this moment I'm waiting for a more
elegant approach but I've failed to come to it on my own, so I decided
to reach out to other oozie users out there and see what comes up.
Thanks in advance.