-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdemo
More file actions
executable file
·124 lines (110 loc) · 3.01 KB
/
Copy pathdemo
File metadata and controls
executable file
·124 lines (110 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
IMAGE_NAME="k8s-agent-v1-demo:local"
BOOTSTRAP_IMAGE_NAME="k8s-agent-bootstrap:local"
require_cmd() {
command -v "$1" >/dev/null 2>&1 || {
echo "Missing required command: $1"
exit 1
}
}
check_requirements() {
require_cmd docker
docker compose version >/dev/null
}
ensure_env() {
if [ ! -f "${ROOT_DIR}/.env" ]; then
cp "${ROOT_DIR}/.env.example" "${ROOT_DIR}/.env"
fi
}
clean_context() {
local build_context
build_context="$(mktemp -d "${TMPDIR:-/tmp}/k8s-agent-buildctx.XXXXXX")"
docker run --rm \
-v "${ROOT_DIR}:/src:ro" \
-v "${build_context}:/dst" \
alpine:3.20 \
sh -c "cd /src && tar --exclude='._*' --exclude='.venv' --exclude='.pytest_cache' --exclude='__pycache__' --exclude='*.pyc' --exclude='.env' -cf - . | tar -xf - -C /dst"
echo "${build_context}"
}
build_images() {
local build_context
build_context="$(clean_context)"
docker build -t "${IMAGE_NAME}" "${build_context}"
docker build -t "${BOOTSTRAP_IMAGE_NAME}" -f "${build_context}/bootstrap/Dockerfile" "${build_context}"
}
wait_for_compose_health() {
for _ in $(seq 1 120); do
if docker compose -f "${ROOT_DIR}/docker-compose.yml" exec -T k8s-agent-api \
python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/readyz')" >/dev/null 2>&1; then
echo "k8s-agent-api is ready"
return 0
fi
sleep 2
done
echo "Timed out waiting for k8s-agent-api readiness"
exit 1
}
up() {
check_requirements
ensure_env
build_images
docker compose -f "${ROOT_DIR}/docker-compose.yml" up -d --no-build redis k8s-agent-api k8s-agent-worker k8s-agent-beat k3s
wait_for_compose_health
docker compose -f "${ROOT_DIR}/docker-compose.yml" run --rm bootstrap
echo
echo "Demo is up. Everything runs through Docker Compose."
echo "Try:"
echo " ./demo status"
echo " ./demo trigger oom"
echo " ./demo trigger crashloop"
echo " ./demo logs"
}
status() {
docker compose -f "${ROOT_DIR}/docker-compose.yml" ps
docker compose -f "${ROOT_DIR}/docker-compose.yml" run --rm bootstrap k8s-agent-bootstrap status
}
logs() {
docker compose -f "${ROOT_DIR}/docker-compose.yml" logs k8s-agent-api k8s-agent-worker k8s-agent-beat bootstrap
}
down() {
check_requirements
docker compose -f "${ROOT_DIR}/docker-compose.yml" down
}
trigger() {
local target="${1:-}"
case "${target}" in
oom)
docker compose -f "${ROOT_DIR}/docker-compose.yml" run --rm bootstrap k8s-agent-bootstrap trigger oom
;;
crashloop)
docker compose -f "${ROOT_DIR}/docker-compose.yml" run --rm bootstrap k8s-agent-bootstrap trigger crashloop
;;
*)
echo "Usage: ./demo trigger oom|crashloop"
exit 1
;;
esac
}
case "${1:-}" in
up)
up
;;
status)
status
;;
logs)
logs
;;
down)
down
;;
trigger)
trigger "${2:-}"
;;
*)
echo "Usage: ./demo up|status|logs|down|trigger oom|trigger crashloop"
exit 1
;;
esac