A REST API to execute teuthology commands.
-
Clone teuthology and teuthology-api.
-
Rename
.env.dev
file to.env
. -
Configure secrets:
3.1. Create a Github OAuth Application by following these instructions. Set "Homepage URL" as
http://localhost:8082/
and "Authorization callback URL" ashttp://localhost:8082/login/callback/
.3.2. Ensure ceph belongs in your public list of organizations[ref]. By default your membership is set private, change that to public by following these steps.
3.3. Save
CLIENT_ID
andCLIENT_SECRET
from your Github OAuth App to your local.env
file asGH_CLIENT_ID
andGH_CLIENT_SECRET
. -
Add the following to teuthology's docker-compose services.
teuthology_api: build: context: ../../../teuthology-api ports: - 8082:8080 environment: TEUTHOLOGY_API_SERVER_HOST: 0.0.0.0 TEUTHOLOGY_API_SERVER_PORT: 8080 PADDLES_URL: http://localhost:8080 depends_on: - teuthology - paddles links: - teuthology - paddles healthcheck: test: [ "CMD", "curl", "-f", "http://0.0.0.0:8082" ]
[optional] For developement use: Add following things in
teuthology_api
container:teuthology_api: environment: DEPLOYMENT: development volumes: - ../../../teuthology-api:/teuthology_api/:rw
DEPLOYMENT: development
would run the server in--reload
mode (server would restart when changes are made in/src
dir) andvolumes
would mount host directory to docker's directory (local changes would reflect in docker container). -
Follow teuthology development setup instructions from here.
-
Clone teuthology-api and
cd
into it. -
Create a virtualenv:
python3 -m venv venv
-
Activate the virtualenv:
source ./venv/bin/activate
-
Build the project:
pip install -e .
-
Start the server:
gunicorn -c gunicorn_config.py teuthology_api.main:app
The documentation can be accessed at http://localhost:8082/docs after running the application.
Note: To run commands, authenticate by visiting http://localhost:8082/login
through browser and follow the github authentication steps (this stores the auth token in browser cookies).
curl http://localhost:8082/
Returns {"root": "success", "session": { <authentication details> }}
.
POST /suite/
: schedules a run.
Two query parameters:
dry_run
(boolean) - Do a dry run; do not schedule anything.logs
(boolean) - Send scheduling logs in response.
Example
curl --location --request POST 'http://localhost:8082/suite?dry_run=false&logs=true' \
--header 'Content-Type: application/json' \
--data-raw '{
"--ceph": "wip-dis-testing-2",
"--ceph-repo": "https://github.com/ceph/ceph-ci.git",
"--kernel": "distro",
"--limit": "2",
"--newest": "0",
"--machine-type": "testnode",
"--num": "1",
"--priority": "70",
"--suite": "teuthology:no-ceph",
"--suite-branch": "wip-dis-testing-2",
"--suite-repo": "https://github.com/ceph/ceph-ci.git",
"--teuthology-branch": "main",
"--verbose": "1",
"--user": "vallariag"
}'
xxx