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 <[email protected]>
Sent: Tuesday, June 14, 2022 10:03 AM
To: [email protected]
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 
[email protected]. Please note that any disclosure or copying of its content is 
forbidden

Reply via email to