VelaUX OpenAPI
This section will introduce how to integrate VelaUX OpenAPI, please make sure you have enabled the velaux addon. Let’s use port-forward to expose the endpoint for the following demo.
vela port-forward addon-velaux -n vela-system 8000:80
Authentication and API Example
Login and get the token
VelaUX has introduced Json Web Token for authorization. As a result, you need to call the login API to complete the authentication and get the token. The following example is with the default admin account.
curl -H Content-Type:application/json -X POST -d '{"username": "admin", "password":"VelaUX12345"}' http://127.0.0.1:8000/api/v1/auth/login
http://127.0.0.1:8000This is demo address, you should replace it with the real address. If you changed the password, replace it with the real password.
The expected output should be like this:
{"user": {"createTime": "0001-01-01T00:00:00Z","lastLoginTime": "0001-01-01T00:00:00Z","name": "admin","email": "barnett.zqg@gmail.com","disabled": false},"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZ3JhbnRUeXBlIjoiYWNjZXNzIiwiZXhwIjoxNjU2NTE0ODcyLCJpc3MiOiJ2ZWxhLWlzc3VlciIsIm5iZiI6MTY1NjUxMTI3Mn0.IqRWglW5cYMn8KJcbkoG55os9g-YTo_9UWFvbpZBKiY","refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZ3JhbnRUeXBlIjoicmVmcmVzaCIsImV4cCI6MTY1NjU5NzY3MiwiaXNzIjoidmVsYS1pc3N1ZXIiLCJuYmYiOjE2NTY1MTEyNzJ9.mUjXj1BQ2c3MaVyYnMYefgH2g8Y-swgjyCAzH-GbZu8"}
- accessToken: This is the token to request other APIs, which will expire in an hour.
- refreshToken: This is the token to refresh the access token.
Request other APIs
- Create an application
curl -H Content-Type:application/json -H "Authorization: Bearer <accessToken>" -X POST -d '{"name":"first-vela-app", "project": "default", "alias": "Demo App", "envBinding": [{"name": "default"}], "component": {"name":"express-server","componentType":"webservice", "properties": "{\"image\":\"oamdev/hello-world\"}"}}' http://127.0.0.1:8000/api/v1/applications
Please replace
<accessToken>with the response from the previous step.
The expected output should be like this:
{"name": "first-vela-app","alias": "Demo App","project": {"name": "default","alias": "Default","description": "Default project is created by velaux system automatically.","createTime": "2022-06-24T14:41:42.237565+08:00","updateTime": "2022-06-24T14:41:42.237565+08:00","owner": {"name": "admin","alias": "Administrator"}},"description": "","createTime": "2022-06-29T22:18:53.699216+08:00","updateTime": "2022-06-29T22:18:53.699217+08:00","icon": ""}
- Deploy an application
curl -H Content-Type:application/json -H "Authorization: Bearer <accessToken>" -X POST -d '{"workflowName":"workflow-default","triggerType":"api"}' http://127.0.0.1:8000/api/v1/applications/first-vela-app/deploy
The expected output should be like this:
{"createTime": "2022-06-29T22:24:25.735085+08:00","version": "20220629222425586","status": "running","deployUser": {"name": "admin","alias": "Administrator"},"note": "","envName": "default","triggerType": "api"}
- Using VelaQL to Query the application pod list
curl -H "Authorization: Bearer <accessToken>" -G \"http://127.0.0.1:8000/api/v1/query" \--data-urlencode 'velaql=component-pod-view{appNs=default,appName=first-vela-app}.status'
The expected output should be like this:
{"podList": [{"cluster": "local","component": "express-server","metadata": {"creationTime": "2022-06-29T14:24:26Z","name": "express-server-6f58ff895b-4gqvs","namespace": "default","version": {"deployVersion": "20220629222425586","publishVersion": "workflow-default-20220629222425602"}},"status": {"hostIP": "172.18.0.2","nodeName": "cloudshell-control-plane","phase": "Running","podIP": "10.244.0.25"},"workload": {"apiVersion": "apps/v1","kind": "Deployment","name": "express-server","namespace": "default"}}]}
For more use cases about VelaQL, Please refer to VelaQL
Refresh the token
curl -H Content-Type:application/json -X GET -H RefreshToken:<refreshToken> http://127.0.0.1:8000/api/v1/auth/refresh_token
The expected output should be like this:
{"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZ3JhbnRUeXBlIjoiYWNjZXNzIiwiZXhwIjoxNjU2NTE2OTExLCJpc3MiOiJ2ZWxhLWlzc3VlciIsIm5iZiI6MTY1NjUxMzMxMX0.zsUW_ME5mxTQxP-UFxQa4F8QDI-69RWpcfIFkn_WFSg","refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZ3JhbnRUeXBlIjoicmVmcmVzaCIsImV4cCI6MTY1NjU5NzY3MiwiaXNzIjoidmVsYS1pc3N1ZXIiLCJuYmYiOjE2NTY1MTEyNzJ9.mUjXj1BQ2c3MaVyYnMYefgH2g8Y-swgjyCAzH-GbZu8"}
API Document
1.3
Refer to Kubevela API 1.3
1.4
Refer to Kubevela API 1.4