Commit b767618
fix(bootstrap): make bootstrap Job reconcile idempotent (no immutable-template churn)
The admin bootstrap Job (spec.auth.adminUser) could have its running pod
killed ~1s after start by the Job controller itself (SuccessfulDelete
immediately after "Started container bootstrap"), then BackoffLimitExceeded,
leaving bootstrapStatus at bootstrap_pending (issue #83).
A Kubernetes Job's pod template is immutable after creation, so any reconcile
that re-renders or patches spec.template makes the Job controller churn and can
delete the active pod. Separately, the Job was built with explicit pod-template
labels but no explicit selector, so the Job controller could adopt a
leftover/orphaned pod from a previous bootstrap Job of the same name (e.g.
after a manual `kubectl delete job` + operator recreate) and then reap it.
This makes the bootstrap Job lifecycle deterministic and non-churning:
- BuildBootstrapJob now sets an explicit, unique spec.selector +
manualSelector=true keyed to the Job name (plus a matching per-Job pod
label), so this Job's pods can never be adopted from a prior Job.
- BuildBootstrapJob stamps a content-hash annotation over the
operator-controlled inputs (image, script, admin email, password secret ref).
- reconcileBootstrapJob is strictly create-if-absent. If the Job exists and the
hash matches, it is left entirely untouched (spec.template is never patched).
Only when the hash differs is the stale Job deleted (foreground propagation)
and recreated on a later reconcile -- never an illegal in-place template
update.
Adds an envtest regression test that reconciles the bootstrap Job N times and
asserts the Job is neither updated (same resourceVersion) nor recreated (same
UID), plus a test that a config change triggers delete+recreate.
Closes #83
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent de2005d commit b767618
3 files changed
Lines changed: 208 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1279 | 1279 | | |
1280 | 1280 | | |
1281 | 1281 | | |
1282 | | - | |
| 1282 | + | |
| 1283 | + | |
| 1284 | + | |
| 1285 | + | |
| 1286 | + | |
| 1287 | + | |
| 1288 | + | |
1283 | 1289 | | |
1284 | 1290 | | |
1285 | 1291 | | |
1286 | | - | |
| 1292 | + | |
| 1293 | + | |
| 1294 | + | |
| 1295 | + | |
| 1296 | + | |
| 1297 | + | |
| 1298 | + | |
| 1299 | + | |
| 1300 | + | |
| 1301 | + | |
| 1302 | + | |
| 1303 | + | |
| 1304 | + | |
| 1305 | + | |
| 1306 | + | |
| 1307 | + | |
| 1308 | + | |
| 1309 | + | |
| 1310 | + | |
| 1311 | + | |
1287 | 1312 | | |
1288 | 1313 | | |
1289 | 1314 | | |
1290 | 1315 | | |
1291 | 1316 | | |
1292 | 1317 | | |
1293 | | - | |
| 1318 | + | |
1294 | 1319 | | |
1295 | 1320 | | |
1296 | 1321 | | |
1297 | 1322 | | |
| 1323 | + | |
| 1324 | + | |
| 1325 | + | |
| 1326 | + | |
| 1327 | + | |
1298 | 1328 | | |
1299 | 1329 | | |
1300 | 1330 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| |||
662 | 663 | | |
663 | 664 | | |
664 | 665 | | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
665 | 779 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
| 5 | + | |
4 | 6 | | |
5 | 7 | | |
6 | 8 | | |
| |||
11 | 13 | | |
12 | 14 | | |
13 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
14 | 30 | | |
15 | 31 | | |
16 | 32 | | |
| |||
156 | 172 | | |
157 | 173 | | |
158 | 174 | | |
159 | | - | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
160 | 188 | | |
161 | | - | |
| 189 | + | |
162 | 190 | | |
163 | 191 | | |
164 | 192 | | |
165 | 193 | | |
166 | 194 | | |
167 | 195 | | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
168 | 200 | | |
169 | 201 | | |
170 | | - | |
| 202 | + | |
171 | 203 | | |
172 | 204 | | |
173 | 205 | | |
| |||
210 | 242 | | |
211 | 243 | | |
212 | 244 | | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
213 | 271 | | |
0 commit comments