Нет такого файла или каталога /airflow/xcom/return.json - PullRequest
0 голосов
/ 19 марта 2019

создал изображение, содержащее /airflow/xcom/return.json с chmod + x на всех вложенных каталогах. Поскольку в журнале не удается найти файл или каталог (пробовал chmod + x)

strtpodbefore = KubernetesPodOperator(namespace='rguonew',
                                    image="mydockerimage",
                                    name="fail",
                                    image_pull_policy="Always",
                                    task_id="failing-task",
                                    get_logs= True,
                                    xcom_push=True,
                                    dag=dag
                                    )'

Вот журнал

[2019-03-18 20:32:07,007] {logging_mixin.py:95} INFO - [2019-03-18 
 20:32:07,007] {pod_launcher.py:166} INFO - Running command... cat 
/airflow/xcom/return.json
[2019-03-18 20:32:07,007] {logging_mixin.py:95} INFO - 
[2019-03-18 20:32:07,026] {logging_mixin.py:95} INFO - [2019-03-18 
20:32:07,026] {pod_launcher.py:173} INFO - cat: can't open 
 '/airflow/xcom/return.json': No such file or directory
[2019-03-18 20:32:07,026] {logging_mixin.py:95} INFO - 
[2019-03-18 20:32:07,026] {logging_mixin.py:95} INFO - [2019-03-18 
 20:32:07,026] {pod_launcher.py:166} INFO - Running command... kill -s 
 SIGINT 1
[2019-03-18 20:32:07,026] {logging_mixin.py:95} INFO - 
[2019-03-18 20:32:07,067] {models.py:1788} ERROR - Pod Launching 
failed: Failed to extract xcom from pod: fail-e18e3dac

Так пробовал таким образом, он работает, но это означает, что он назначает xcom json извне, но не из образа

 return_value = '{"foo": "bar"\n, "buzz": 2}'
 strtpodbefore = KubernetesPodOperator(namespace='rguonew',
                                image="python:3.6.6-stretch",
                                cmds=["bash", "-cx"],
                                name="fail",
                                task_id="failing-task",
                                arguments=['echo \'{}\' > 
 /airflow/xcom/return.json'.format(return_value)],
                                get_logs= True,
                                xcom_push=True,
                                dag=dag
                                )

, поэтому я попробовал окончательное решение с дополнительным аргументомно все равно не работает, первая команда не получает такой каталог return

strtpodbefore = KubernetesPodOperator(namespace='rguonew',
                                    image="myimages",
                                    name="fail",
                                    image_pull_policy="Always",
                                    cmds=["bash", "-cx"],
                                    arguments=['echo \'{}\' > 
/airflow/xcom/return.json'.format(return_value)],
                                    task_id="failing-task",
                                    get_logs= True,
                                    xcom_push=True,
                                    dag=dag
                                    )

1 Ответ

0 голосов
/ 19 марта 2019

Когда вы устанавливаете xcom_push = True, контейнер с коляской будет создан вместе с вашим контейнером исполнителя.Контейнер коляски будет читать /airflow/xcom/return.json исполнителя, поэтому вам действительно нужно записать в него из контейнера исполнителя, как вы это делали во втором примере.

См. Здесь: https://stackoverflow.com/a/53568710/10675601

Когда мы работали над нашим модулем pod xcom, были также некоторые проблемы, связанные с RBAC, которые необходимо установить: Оператор воздушного потока k8s xcom - Состояние рукопожатия 403 Запрещено

...