diff --git a/setup.py b/setup.py index 6712db3d..f5cf46a3 100644 --- a/setup.py +++ b/setup.py @@ -25,6 +25,7 @@ setup(name='shipyard_airflow', 'shipyard_airflow.control'], install_requires=[ 'falcon', + 'requests', 'uwsgi>1.4' ] ) diff --git a/shipyard_airflow/control/api.py b/shipyard_airflow/control/api.py index ea4d8a66..8913b86c 100644 --- a/shipyard_airflow/control/api.py +++ b/shipyard_airflow/control/api.py @@ -17,6 +17,7 @@ import json from .regions import RegionsResource, RegionResource from .base import ShipyardRequest, BaseResource from .tasks import TaskResource +from .dag_runs import DagRunResource from .middleware import AuthMiddleware, ContextMiddleware, LoggingMiddleware @@ -32,6 +33,7 @@ def start_api(): ('/regions', RegionsResource()), ('/regions/{region_id}', RegionResource()), ('/dags/{dag_id}/tasks/{task_id}', TaskResource()), + ('/dags/{dag_id}/dag_runs', DagRunResource()), ] for path, res in v1_0_routes: diff --git a/shipyard_airflow/control/dag_runs.py b/shipyard_airflow/control/dag_runs.py new file mode 100644 index 00000000..e34c13ca --- /dev/null +++ b/shipyard_airflow/control/dag_runs.py @@ -0,0 +1,39 @@ +# Copyright 2017 AT&T Intellectual Property. All other rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import falcon +import requests + +from .base import BaseResource + +class DagRunResource(BaseResource): + + authorized_roles = ['user'] + + def on_post(self, req, resp, dag_id, run_id=None, conf=None, execution_date=None): + req_url = 'http://localhost:32080/api/experimental/dags/{}/dag_runs'.format(dag_id) + + response = requests.post(req_url, + json={ + "run_id": run_id, + "conf": conf, + "execution_date": execution_date, + }) + if not response.ok: + raise IOError() + else: + resp.status = falcon.HTTP_200 + + data = response.json() + + return data['message'] diff --git a/shipyard_airflow/control/tasks.py b/shipyard_airflow/control/tasks.py index e07e49f3..27a02347 100644 --- a/shipyard_airflow/control/tasks.py +++ b/shipyard_airflow/control/tasks.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import falcon +import json import requests from .base import BaseResource @@ -22,5 +23,6 @@ class TaskResource(BaseResource): def on_get(self, req, resp, dag_id, task_id): resp.status = falcon.HTTP_200 - req_url = 'http://localhost:32080/api/experimental/dags/' + dag_id + '/tasks/' + task_id + req_url = 'http://localhost:32080/api/experimental/dags/{}/tasks/{}'.format(dag_id, task_id) task_details = requests.get(req_url).json() + resp.body = json.dumps(task_details) diff --git a/shipyard_airflow/setup.py b/shipyard_airflow/setup.py index 6712db3d..f5cf46a3 100644 --- a/shipyard_airflow/setup.py +++ b/shipyard_airflow/setup.py @@ -25,6 +25,7 @@ setup(name='shipyard_airflow', 'shipyard_airflow.control'], install_requires=[ 'falcon', + 'requests', 'uwsgi>1.4' ] )