- Notifications
You must be signed in to change notification settings - Fork1k
Commit0f6ca55
feat: implement scheduling mechanism for prebuilds (#18126)
Closescoder/internal#312Depends oncoder/terraform-provider-coder#408This PR adds support for defining an **autoscaling block** forprebuilds, allowing number of desired instances to scale dynamicallybased on a schedule.Example usage:```data "coder_workspace_preset" "us-nix" { ... prebuilds = { instances = 0 # default to 0 instances scheduling = { timezone = "UTC" # a single timezone is used for simplicity # Scale to 3 instances during the work week schedule { cron = "* 8-18 * * 1-5" # from 8AM–6:59PM, Mon–Fri, UTC instances = 3 # scale to 3 instances } # Scale to 1 instance on Saturdays for urgent support queries schedule { cron = "* 8-14 * * 6" # from 8AM–2:59PM, Sat, UTC instances = 1 # scale to 1 instance } } }}```### Behavior- Multiple `schedule` blocks per `prebuilds` block are supported.- If the current time matches any defined autoscaling schedule, thecorresponding number of instances is used.- If no schedule matches, the **default instance count**(`prebuilds.instances`) is used as a fallback.### WhyThis feature allows prebuild instance capacity to adapt to predictableusage patterns, such as:- Scaling up during business hours or high-demand periods- Reducing capacity during off-hours to save resources### Cron specificationThe cron specification is interpreted as a **continuous time range.**For example, the expression:```* 9-18 * * 1-5```is intended to represent a continuous range from **09:00 to 18:59**,Monday through Friday.However, due to minor implementation imprecision, it is currentlyinterpreted as a range from **08:59:00 to 18:58:59**, Monday throughFriday.This slight discrepancy arises because the evaluation is based onwhether a specific **point in time** falls within the range, using the`github.com/coder/coder/v2/coderd/schedule/cron` library, which performsper-minute matching rather than strict range evaluation.---------Co-authored-by: Danny Kopping <danny@coder.com>1 parent511fd09 commit0f6ca55
File tree
38 files changed
+2528
-871
lines changed- coderd
- database
- dbauthz
- dbfake
- dbgen
- dbmem
- dbmetrics
- dbmock
- migrations
- testdata/fixtures
- queries
- prebuilds
- provisionerdserver
- schedule/cron
- enterprise/coderd/prebuilds
- provisionerd/proto
- provisionersdk/proto
- provisioner/terraform
- testdata/resources
- presets
- site/e2e
38 files changed
+2528
-871
lines changedOriginal file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1686 | 1686 |
| |
1687 | 1687 |
| |
1688 | 1688 |
| |
| 1689 | + | |
| 1690 | + | |
| 1691 | + | |
| 1692 | + | |
| 1693 | + | |
| 1694 | + | |
| 1695 | + | |
1689 | 1696 |
| |
1690 | 1697 |
| |
1691 | 1698 |
| |
| |||
3661 | 3668 |
| |
3662 | 3669 |
| |
3663 | 3670 |
| |
| 3671 | + | |
| 3672 | + | |
| 3673 | + | |
| 3674 | + | |
| 3675 | + | |
| 3676 | + | |
| 3677 | + | |
| 3678 | + | |
| 3679 | + | |
3664 | 3680 |
| |
3665 | 3681 |
| |
3666 | 3682 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
979 | 979 |
| |
980 | 980 |
| |
981 | 981 |
| |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
982 | 1005 |
| |
983 | 1006 |
| |
984 | 1007 |
| |
| |||
4916 | 4939 |
| |
4917 | 4940 |
| |
4918 | 4941 |
| |
| 4942 | + | |
| 4943 | + | |
| 4944 | + | |
| 4945 | + | |
| 4946 | + | |
| 4947 | + | |
4919 | 4948 |
| |
4920 | 4949 |
| |
4921 | 4950 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
415 | 415 |
| |
416 | 416 |
| |
417 | 417 |
| |
| 418 | + | |
418 | 419 |
| |
419 | 420 |
| |
420 | 421 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1302 | 1302 |
| |
1303 | 1303 |
| |
1304 | 1304 |
| |
| 1305 | + | |
1305 | 1306 |
| |
1306 | 1307 |
| |
1307 | 1308 |
| |
1308 | 1309 |
| |
1309 | 1310 |
| |
| 1311 | + | |
| 1312 | + | |
| 1313 | + | |
| 1314 | + | |
| 1315 | + | |
| 1316 | + | |
| 1317 | + | |
| 1318 | + | |
| 1319 | + | |
| 1320 | + | |
1310 | 1321 |
| |
1311 | 1322 |
| |
1312 | 1323 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
2778 | 2778 |
| |
2779 | 2779 |
| |
2780 | 2780 |
| |
| 2781 | + | |
| 2782 | + | |
| 2783 | + | |
| 2784 | + | |
2781 | 2785 |
| |
2782 | 2786 |
| |
2783 | 2787 |
| |
| |||
9191 | 9195 |
| |
9192 | 9196 |
| |
9193 | 9197 |
| |
| 9198 | + | |
| 9199 | + | |
| 9200 | + | |
| 9201 | + | |
| 9202 | + | |
| 9203 | + | |
| 9204 | + | |
| 9205 | + | |
| 9206 | + | |
9194 | 9207 |
| |
9195 | 9208 |
| |
9196 | 9209 |
| |
|
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 6 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + |
0 commit comments
Comments
(0)