related: #239 This commit brings partial support for secrets to the backend API. It enables the `frontend` component to successfully create a Workspace through the "wizard flow". **HOWEVER**, it is important to note this secrets attribute is not supported within the `controller` component yet - as #240 is not yet merged. To unblock the `frontend` - the logic contained in this commit simply adds the necessary scaffolding to accept the `secrets` attribute defined within `volumes`. Once umarshalled, the backend essentially ignores this data. Code to fully enable the end to end flow is included in this PR - but simply commented out with `TODO:` comments denoting what can be uncommented once #240 is merged into `notebooks-v2`. A test is also presently disabled with `XIt` - and can also be enabled when required code present. Changes were initially coded against the branch provided on #240 to verify full end-to-end behavior. Once confirmed, commit was rebased onto `notebooks-v2`, relevant code commented out as described above, and behavior retested to ensure desired outcome. In summary, with these changes: - `backend` API accepts `volumes.secrets` in the _Create_ payload - secrets data is **NOT USED** when programmatically constructing the Workspace CR - Resultant workspace has no `secrets` data - irrespective of it if was provided in the payload or not. Signed-off-by: Andy Stoneberg <astonebe@redhat.com> |
||
---|---|---|
.. | ||
api | ||
cmd | ||
internal | ||
openapi | ||
.dockerignore | ||
.gitignore | ||
.golangci.yml | ||
Dockerfile | ||
Makefile | ||
README.md | ||
go.mod | ||
go.sum |
README.md
Kubeflow Workspaces Backend
The Kubeflow Workspaces Backend is the backend for frontend (BFF) used by the Kubeflow Workspaces Frontend as part of Kubeflow Notebooks 2.0.
⚠️ Warning ⚠️
The Kubeflow Workspaces Backend is a work in progress and is NOT currently ready for use. We greatly appreciate any contributions.
Building and Deploying
TBD
Development
Run the following command to build the BFF:
make build
After building it, you can run our app with:
make run
If you want to use a different port:
make run PORT=8000
Endpoints
URL Pattern | Handler | Action |
---|---|---|
GET /api/v1/healthcheck | healthcheck_handler | Show application information |
GET /api/v1/namespaces | namespaces_handler | Get all Namespaces |
GET /api/v1/swagger/ | swagger_handler | Swagger API documentation |
GET /api/v1/workspaces | workspaces_handler | Get all Workspaces |
GET /api/v1/workspaces/{namespace} | workspaces_handler | Get all Workspaces from a namespace |
POST /api/v1/workspaces/{namespace} | workspaces_handler | Create a Workspace in a given namespace |
GET /api/v1/workspaces/{namespace}/{name} | workspaces_handler | Get a Workspace entity |
PATCH /api/v1/workspaces/{namespace}/{name} | TBD | Patch a Workspace entity |
PUT /api/v1/workspaces/{namespace}/{name} | TBD | Update a Workspace entity |
DELETE /api/v1/workspaces/{namespace}/{name} | workspaces_handler | Delete a Workspace entity |
GET /api/v1/workspacekinds | workspacekinds_handler | Get all WorkspaceKind |
POST /api/v1/workspacekinds | TBD | Create a WorkspaceKind |
GET /api/v1/workspacekinds/{name} | workspacekinds_handler | Get a WorkspaceKind entity |
PATCH /api/v1/workspacekinds/{name} | TBD | Patch a WorkspaceKind entity |
PUT /api/v1/workspacekinds/{name} | TBD | Update a WorkspaceKind entity |
DELETE /api/v1/workspacekinds/{name} | TBD | Delete a WorkspaceKind entity |
Sample local calls
Healthcheck:
# GET /api/v1/healthcheck
curl -i localhost:4000/api/v1/healthcheck
List all Namespaces:
# GET /api/v1/namespaces
curl -i localhost:4000/api/v1/namespaces
List all Workspaces:
# GET /api/v1/workspaces/
curl -i localhost:4000/api/v1/workspaces
List all Workspaces in a Namespace:
# GET /api/v1/workspaces/{namespace}
curl -i localhost:4000/api/v1/workspaces/default
Create a Workspace:
# POST /api/v1/workspaces/{namespace}
curl -X POST http://localhost:4000/api/v1/workspaces/default \
-H "Content-Type: application/json" \
-d '{
"data": {
"name": "dora",
"kind": "jupyterlab",
"paused": false,
"deferUpdates": false,
"podTemplate": {
"podMetadata": {
"labels": {
"app": "dora"
},
"annotations": {
"app": "dora"
}
},
"volumes": {
"home": "workspace-home-bella",
"data": [
{
"pvcName": "workspace-data-bella",
"mountPath": "/data/my-data",
"readOnly": false
}
]
},
"options": {
"imageConfig": "jupyterlab_scipy_190",
"podConfig": "tiny_cpu"
}
}
}
}'
Get a Workspace:
# GET /api/v1/workspaces/{namespace}/{name}
curl -i localhost:4000/api/v1/workspaces/default/dora
Delete a Workspace:
# DELETE /api/v1/workspaces/{namespace}/{name}
curl -X DELETE localhost:4000/api/v1/workspaces/default/dora
List all WorkspaceKinds:
# GET /api/v1/workspacekinds
curl -i localhost:4000/api/v1/workspacekinds
Get a WorkspaceKind:
# GET /api/v1/workspacekinds/{name}
curl -i localhost:4000/api/v1/workspacekinds/jupyterlab