@@ -16,6 +16,8 @@ DEVWORKSPACE_LINK="https://gist.githubusercontent.com/rohanKanojia/ecf625afaf3fe
16
16
MAX_VUS=" 100"
17
17
DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS=" 1200"
18
18
SEPARATE_NAMESPACES=" false"
19
+ DELETE_DEVWORKSPACE_AFTER_READY=" true"
20
+ MAX_DEVWORKSPACES=" -1"
19
21
CREATE_AUTOMOUNT_RESOURCES=" false"
20
22
LOGS_DIR=" logs"
21
23
TEST_DURATION_IN_MINUTES=" 25"
@@ -57,7 +59,9 @@ Usage: $0 [options]
57
59
Options:
58
60
--mode <operator|binary> Mode to run the script (default: operator)
59
61
--max-vus <int> Number of virtual users for k6 (default: 100)
62
+ --max-devworkspaces <int> Maximum number of DevWorkspaces to create (by default, it's not specified)
60
63
--separate-namespaces <true|false> Use separate namespaces for workspaces (default: false)
64
+ --delete-devworkspace-after-ready Delete DevWorkspace once it becomes Ready (default: true)
61
65
--devworkspace-ready-timeout-seconds <int> Timeout in seconds for workspace to become ready (default: 1200)
62
66
--devworkspace-link <string> DevWorkspace link (default: empty, opinionated DevWorkspace is created)
63
67
--create-automount-resources <true|false> Whether to create automount resources (default: false)
@@ -77,6 +81,10 @@ parse_arguments() {
77
81
MAX_VUS=" $2 " ; shift 2;;
78
82
--separate-namespaces)
79
83
SEPARATE_NAMESPACES=" $2 " ; shift 2;;
84
+ --max-devworkspaces)
85
+ MAX_DEVWORKSPACES=" $2 " ; shift 2;;
86
+ --delete-devworkspace-after-ready)
87
+ DELETE_DEVWORKSPACE_AFTER_READY=" $2 " ; shift 2;;
80
88
--devworkspace-ready-timeout-seconds)
81
89
DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS=" $2 " ; shift 2;;
82
90
--devworkspace-link)
@@ -173,11 +181,31 @@ start_background_watchers() {
173
181
kubectl get dw --watch --all-namespaces \
174
182
>> " ${LOGS_DIR} /${TIMESTAMP} _dw_watch.log" 2>&1 &
175
183
PID_DW_WATCH=$!
184
+
185
+ echo " 📄 Starting periodic failed DevWorkspaces report (every 10s)..."
186
+ (
187
+ while true ; do
188
+ POLL_TIMESTAMP=$( date +%Y-%m-%d_%H-%M-%S)
189
+ kubectl get devworkspaces --all-namespaces -o json | jq -r '
190
+ ["namespace","name","phase","message"],
191
+ (.items[]
192
+ | select(.status.phase == "Failed")
193
+ | [
194
+ .metadata.namespace,
195
+ .metadata.name,
196
+ .status.phase,
197
+ (.status.message // "No message")
198
+ ])
199
+ | @csv' > " ${LOGS_DIR} /dw_failure_report.csv"
200
+ sleep 10
201
+ done
202
+ ) &
203
+ PID_FAILED_DW_POLL=$!
176
204
}
177
205
178
206
stop_background_watchers () {
179
207
echo " 🛑 Stopping background watchers..."
180
- kill " $PID_EVENTS_WATCH " " $PID_DW_WATCH " 2> /dev/null || true
208
+ kill " $PID_EVENTS_WATCH " " $PID_DW_WATCH " " $PID_FAILED_DW_POLL " 2> /dev/null || true
181
209
}
182
210
183
211
install_k6_operator () {
@@ -235,6 +263,10 @@ spec:
235
263
value: '${TEST_DURATION_IN_MINUTES} '
236
264
- name: DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS
237
265
value: '${DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS} '
266
+ - name: DELETE_DEVWORKSPACE_AFTER_READY
267
+ value: '${DELETE_DEVWORKSPACE_AFTER_READY} '
268
+ - name: MAX_DEVWORKSPACES
269
+ value: '${MAX_DEVWORKSPACES} '
238
270
EOF
239
271
}
240
272
@@ -330,6 +362,8 @@ run_k6_binary_test() {
330
362
MAX_VUS=" ${MAX_VUS} " \
331
363
TEST_DURATION_IN_MINUTES=" ${TEST_DURATION_IN_MINUTES} " \
332
364
DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS=" ${DEV_WORKSPACE_READY_TIMEOUT_IN_SECONDS} " \
365
+ DELETE_DEVWORKSPACE_AFTER_READY=" ${DELETE_DEVWORKSPACE_AFTER_READY} " \
366
+ MAX_DEVWORKSPACES=" ${MAX_DEVWORKSPACES} " \
333
367
k6 run " ${K6_SCRIPT} "
334
368
exit_code=$?
335
369
if [ $exit_code -ne 0 ]; then
@@ -338,4 +372,5 @@ run_k6_binary_test() {
338
372
return 0
339
373
}
340
374
375
+ trap cleanup_watchers EXIT
341
376
main " $@ "
0 commit comments