Restart Policies directory with features - #433
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a new Python-based HTTP server example intended to demonstrate Unikraft Cloud restart policies by providing endpoints that can exit with configurable codes, plus deployment/API helper scripts and documentation.
Changes:
- Introduces a minimal Python HTTP server with
/,/health, and/exit?code=N. - Adds a walkthrough README for deploying instances with
never,always, andon-failurerestart policies. - Adds a Kraftfile + Dockerfile and simple bash scripts to create/list/interact/delete instances via the API.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| httpserver-python-restartpolicie/server.py | New HTTP server implementation used to trigger exits and observe restart behavior. |
| httpserver-python-restartpolicie/README.md | Usage docs for deploying/testing restart policies via CLI and API scripts. |
| httpserver-python-restartpolicie/Kraftfile.yml | New build/runtime configuration for the example. |
| httpserver-python-restartpolicie/Dockerfile | Rootfs definition for packaging the example payload. |
| httpserver-python-restartpolicie/api/create.sh | Creates an instance via the Unikraft Cloud API. |
| httpserver-python-restartpolicie/api/list.sh | Lists instances via the Unikraft Cloud API. |
| httpserver-python-restartpolicie/api/interact.sh | Calls the example’s endpoints via HTTPS. |
| httpserver-python-restartpolicie/api/delete.sh | Deletes an instance via the Unikraft Cloud API. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
Suppressed comments (6)
httpserver-python-restartpolicie/server.py:22
/exitparses thecodequery parameter withint(...)without validation; a non-integer value (e.g.?code=foo) raisesValueErrorand results in an unhandled exception instead of a controlled response.
elif parsed.path == "/exit":
code = int(params.get("code", ["0"])[0])
self._respond(200, f"Exiting with code {code}...\n")
self.wfile.flush()
sys.exit(code)
httpserver-python-restartpolicie/README.md:35
- The README lists server endpoints but omits
GET /health, even though the server implements it (returnsOK). This can confuse readers trying to verify liveness behavior.
| Endpoint | Description |
|----------|-------------|
| `GET /` | Returns `Hello from restart-demo!` |
| `GET /exit?code=N` | Calls `sys.exit(N)` — simulates crash or clean exit |
httpserver-python-restartpolicie/Kraftfile.yml:5
- This Kraftfile uses
spec: v0.6and the short-formrootfs: ./Dockerfile, but the rest of the repo’s Kraftfiles consistently usespec: v0.7with an explicitrootfs.source+rootfs.format(e.g.httpserver-bun/Kraftfile:1-11). Using the consistent format reduces tooling surprises across examples.
spec: v0.6
name: restart-demo
runtime: python:3.12
rootfs: ./Dockerfile
cmd: ["/usr/bin/python3", "/app/server.py"]
httpserver-python-restartpolicie/api/list.sh:8
- The API endpoint is hardcoded to the
frametro. Since the README instructs users to setUKC_METRO, hardcoding the region makes the script fail for other metros.
curl -s \
-H "Authorization: Bearer $UKC_TOKEN" \
https://api.fra.unikraft.cloud/v1/instances \
| jq .
httpserver-python-restartpolicie/api/create.sh:23
- The instance-create script hardcodes the
frametro in the API URL, which contradicts the README’sUKC_METROsetup and breaks usage in other regions.
curl -s \
-X POST \
-H "Authorization: Bearer $UKC_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"$NAME\",
\"image\": \"$IMAGE\",
\"memory_mb\": $MEMORY,
\"restart_policy\": \"$POLICY\",
\"autostart\": true
}" \
https://api.fra.unikraft.cloud/v1/instances \
| jq .
httpserver-python-restartpolicie/api/delete.sh:12
- The delete script hardcodes the
frametro in the API URL. UsingUKC_METRO(with a sensible default) makes it consistent with the README and usable across regions.
curl -s \
-X DELETE \
-H "Authorization: Bearer $UKC_TOKEN" \
https://api.fra.unikraft.cloud/v1/instances/$UUID \
| jq .
| unikraft run --metro fra -m 256M -p 443:8080/http+tls --restart never --name restart-never --image restart-never:latest | ||
| unikraft run --metro fra -m 256M -p 443:8080/http+tls --restart always --name restart-always --image restart-always:latest | ||
| unikraft run --metro fra -m 256M -p 443:8080/http+tls --restart on-failure --name restart-on-failure --image restart-on-failure:latest |
No description provided.