lvarin/cwl-wes
Microservice implementing the Global Alliance for Genomics and Health (GA4GH) Workflow Execution Service (WES) API specification for the execution of workflows written in the Common Workflow Language (CWL).
cwl-WES is a core service of the ELIXIR Cloud & AAI project.
cwl-WES (formerly: WES-ELIXIR) is a Flask/Gunicorn application that makes use of Connexion to implement the GA4GH WES OpenAPI specification. It enables clients/users to execute CWL workflows in the cloud via a GA4GH Task Execution Service (TES)-compatible execution backend (e.g., TESK or Funnel). Workflows can be sent for execution, previous runs can be listed, and the status and run information of individual runs can be queried. The service leverages cwl-tes to interpret CWL workflows, break them down into individual tasks and emit GA4GH TES-compatible HTTP requests to a configured TES instance. Access to endpoints can be configured to require JSON Web Token-based access tokens, such as those issued by ELIXIR AAI. Run information is stored in a MongoDB database.
Note that development is currently in beta stage. Check the website badge at the top of this document for a publicly available test deployment. Further test deployments can be found at the ELIXIR Cloud & AAI's resource listings.
cwl-WES is developed and maintained by the ELIXIR Cloud & AAI project, a multinational effort aimed at establishing and implementing FAIR research in the Life Sciences.
See separate instructions available here.
Ensure you have the following software installed:
These are the versions used for development/testing. Other versions may or may not work. Please let us know if you encounter any issues with newer versions than the listed ones.
Set up environment
Create data directory and required subdiretories:
bashmkdir -p data/cwl_wes/db data/cwl_wes/output data/cwl_wes/tmp
Clone repository:
bashgit clone [***] app
Traverse to app directory:
bashcd app
Optional: Edit/override app config
Via the app configuration file
bashvi cwl_wes/config/app_config.yaml
Via environment variables
A few configuration settings can be overridden by environment variables:
bashexport <ENV_VAR_NAME>=<VALUE>
List of the available environment variables:
| Variable | Description |
|---|---|
| MONGO_HOST | MongoDB host endpoint |
| MONGO_PORT | MongoDB service port |
| MONGO_DBNAME | MongoDB database name |
| MONGO_USERNAME | MongoDB client username |
| MONGO_PASSWORD | MongoDB client password |
| RABBIT_HOST | RabbitMQ host endpoint |
| RABBIT_PORT | RabbitMQ service port |
Build & deploy
Build and run services in detached/daemonized mode:
bashdocker-compose up -d --build
Copy FTP credentials
Create a .netrc file with credentials for accessing an FTP server:
bashcat << EOF > .netrc machine <HOST> login <USERNAME> password <PASSWORD> EOF
Don't forget to replace
<HOST>,<USERNAME>and<PASSWORD>with real values.If you do not know what to put here, creating an empty file
.netrcwith, e.g.,touch .netrcwill be fine for testing purposes.
Copy the file into the running worker container(s):
bashfor cont in $(docker ps --all | grep cwl-wes_wes-worker | cut -f1 -d" "); do docker cp .netrc "${cont}:/tmp/user" done
Use service
Visit Swagger UI:
bashfirefox http://localhost:7777/ga4gh/wes/v1/ui
Example values to start a simple CWL test workflow via the POST /runs
endpoint:
consoleworkflow_params: {"input":{"class":"File","path":"[***]"}}` workflow_type: CWL workflow_type_version`: v1.0 workflow_url: [***]
Leave the rest of the values empty and hit the Try it out! button.
You can also use the service through curl. For example, to send a request to
the GET /runs endpoint:
consolecurl -X GET \ --header 'Accept: application/json' \ 'http://localhost:7777/ga4gh/wes/v1/runs'
Authorization
All endpoints except for GET /service-info can be configured to require the
presence of a valid JWT Bearer token in a request's header. This can be enabled
by setting the following paraneter in the app configuration to
True:
yaml# Security settings security: authorization_required: True
To send authorized requests, you must be in possession of a valid JWT Bearer token. The app was developed against JWTs issues by ELIXIR AAI, although JWTs issued by other identity providers may work.
If you want to utilize actual compute resources in any of the ELIXIR test deployments, you must be a member of a specific ELIXIR user group. You can apply here to be added to that group (ELIXIR AAI only!). When applying, please include a brief description of why you would like to make use of our test deployments and please note that they are for fair use only (please don't try to run your production workflows on them or we will need to re-think our strategy of offering free resources for testing/developing).
To access protected endpoints via curl, you only need to add an Authorization
header to your request, followed by the Bearer prefix and your JWT token, like
so:
consolecurl -X GET \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <YOUR_TOKEN>' \ 'http://localhost:7777/ga4gh/wes/v1/runs'
If you are making use of the Swagger UI, you will need to click on the
Authorize button (which appears on the right-hand side of the top bar upon
enabling the authorization_required option) of the Swagger UI website and
enter your JWT token in the api_key field, preceded by the Bearer prefix:
!api_key
This project is a community effort and lives off your contributions, be it in the form of bug reports, feature requests, discussions, or fixes and other code changes. Please refer to our organization's contributing guidelines if you are interested to contribute. Please mind the code of conduct for all interactions with the community.
Development of the app is currently still in beta stage, and current versions are for internal use only. We are aiming to have a fully spec-compliant version of the app available soon. The plan is to then adopt a semantic versioning scheme in which we would shadow WES spec versioning, with added date stamp patches for any patch-level changes to our service.
This project is covered by the Apache License 2.0 also shipped with this repository.
The project is a collaborative effort under the umbrella of ELIXIR Cloud & AAI. Follow the link to get in touch with us via chat or email. Please mention the name of this service for any inquiry, proposal, question etc.
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务