KubernetesPodOperator parameterize the image tag ID

3/3/2020

In the KubernetesPodOperator below, how can I make the image tag(16.04) as a parameter/config value that I can provide via a ConfigMap key value?

k = KubernetesPodOperator(namespace='default',
                          image="ubuntu:16.04",
                          cmds=["bash", "-cx"],
                          arguments=["echo", "10"],
                          labels={"foo": "bar"},
                          secrets=[secret_file, secret_env, secret_all_keys],
                          ports=[port]
                          volumes=[volume],
                          volume_mounts=[volume_mount]
                          name="test",
                          task_id="task",
                          affinity=affinity,
                          is_delete_operator_pod=True,
                          hostnetwork=False,
                          tolerations=tolerations,
                          configmaps=configmaps
                          )
-- alltej
airflow
kubernetes
kubernetes-helm
kubernetes-pod

1 Answer

3/5/2020

Create a Secret or ConfigMap resource. Add the key/value pair:

apiVersion: v1
kind: ConfigMap
metadata:
  name: "app-configmap-env"
  namespace: "app-ns"
data:
  imageTagId: "abcd1234"

In the DAG definition file:

    with DAG(dag_id='my_dag', default_args=default_args, schedule_interval=None) as dag:

        configmaps = ['app-configmap-env']

        image_tag_id = os.environ.get('imageTagId', '')
        image_name_tag = "ubuntu:%s" % (image_tag_id)
        ...
        k = KubernetesPodOperator(namespace='default',
                          image=image_name_tag,
                          cmds=["bash", "-cx"],
        ...
-- alltej
Source: StackOverflow