Yeah it does seem that templating does not work with expanded params at the moment. No promises but I would bet this will change at some point. Seems reasonable and I can't think of a technical problem.
Tal's approach looks good. I came up with basically the same thing when testing this out: @dag.task def gen_vars(ds=None): return [{"MY_VAR": ds} for x in range(3)] op2 = BashOperator.partial(task_id='task_mapped', bash_command="echo $MY_VAR",).expand( env=gen_vars(), ) One thing I noticed in your example was, it appears, maybe you are mapping from two upstream tasks, for two mapped arguments. You may have noticed, this will result in a cartesian product (maybe this is desirable for you?). This is an area we are actively working on, so that you can provide multiple kwargs to map from a single task. On Wed, Jun 15, 2022 at 3:36 AM Tal Nagar <tal.na...@evogene.com> wrote: > Hi Joe > > Not sure if it's the recommended way to do it, however what worked for me > is rendering the templates in a python task and not directly in the > KubernetesPodOperator. > > For example: > > > > @task() > > def create_cmds(**context): > > run_params = context["params"] > > size = int(run_params['size']) > > arr = [] > > for s in range(int(size)): > > arr.append([f'echo hi {s}']) > > return arr > > > > say_hi = KubernetesPodOperator.partial( > > image="alpine", > > cmds=["/bin/sh", "-c"], > > task_id='test', > > name='test' > > ).expand(arguments=create_cmds()) > > > > *From:* Joe Auty <joea...@gmail.com> > *Sent:* Tuesday, June 14, 2022 10:03 AM > *To:* users@airflow.apache.org > *Subject:* Templated fields and dynamic task mapping > > > > Hello, > > I'm trying to understand the docs here: > https://airflow.apache.org/docs/apache-airflow/2.3.2/concepts/dynamic-task-mapping.html#how-do-templated-fields-and-mapped-arguments-interact > , specifically this section: > > > If you want to interpolate values either call task.render_template yourself, > or use interpolation: > > > In the example in the previous section of what doesn't work we have: > > printer.expand(val=make_list()) > > > What should the corrected version of this line be? IOW, how would I call > make_list passing in the context so that I can send templated fields to my > mapping function? Here is a more specific use case: > > > KubernetesPodOperator.partial( > task_id="schema-dump-input", > namespace=NAMESPACE, > image=REGISTRY_URL + "/postgres-client:12", > name="pg-schemadump", > in_cluster=True, > hostnetwork=False, > max_active_tis_per_dag=1, > dag=dag > ).expand( > cmds=schema_dump_input_cmds(ds), > env_vars=schema_dump_input_env_vars(ds) > ) > > In this example, ds has no value of course because it is not defined > anywhere, and of course {{ ds }} doesn't work either (this doesn't get > interpolated and is registered as literally "{{ ds }}"). How can I pass in > a templated field, such as {{ ds }}? > > Thanks very much in advance! > > > > This message contains information that may be confidential. If you are not > the intended recipient, please delete it immediately and notify us at > i...@evogene.com. Please note that any disclosure or copying of its > content is forbidden >