Apache Airflow |使用SSHOperator时如何检查来自命令的响应?

时间:2019-04-10 13:27:28

标签: ssh airflow apache-airflow-xcom

在使用SSHOperator时如何检查来自命令的响应?

t1  = SSHOperator(ssh_conn_id='conn_box2',
                 task_id='t1',
                 command='Rscript /code/demo.R',
                 do_xcom_push=True,
                 response_check=lambda response: True if "status:200" in response.text else False,
                 dag=dag
)

如果执行顺利,我的R脚本将返回status:200。我想跟踪它。我的任务t1应该仅在状态为200时完成。 如果R脚本返回status:300,则表示失败。但是由于执行已完成且UI任务中没有任何错误,因此变成了绿色(我不想要)

我上面的代码能够捕获xcom中的响应,但是我如何验证它?

1 个答案:

答案 0 :(得分:0)

尝试以下代码:

bash_command = """
set -e;
Rscript /code/demo.R  | grep 'status:200'  &> /dev/null 
if [ $? == 0 ]; then
   echo "Task Successful"
else
   echo "Task Failed"
   exit 1
fi
"""


t1  = SSHOperator(ssh_conn_id='conn_box2',
                 task_id='t1',
                 command=bash_command,
                 dag=dag)

或者,您也可以使用以下bash_command

if Rscript /code/demo.R | grep -q 'status:200'; then
  echo "Task Successful"
else
  echo "Task Failed"
  exit 1
fi

SSHOperator没有response_check参数。