- Notifications
You must be signed in to change notification settings - Fork921
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
- provisioner/terraform
- testdata/resources
- presets
- provisionerd/proto
- provisionersdk/proto
- site/e2e
38 files changed
+2528
-871
lines changedLines changed: 16 additions & 0 deletions
Original 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 |
| |
|
Lines changed: 29 additions & 0 deletions
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 |
| |
|
Lines changed: 1 addition & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
415 | 415 |
| |
416 | 416 |
| |
417 | 417 |
| |
| 418 | + | |
418 | 419 |
| |
419 | 420 |
| |
420 | 421 |
| |
|
Lines changed: 11 additions & 0 deletions
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 |
| |
|
Lines changed: 13 additions & 0 deletions
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 |
| |
|
Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
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 | + |
Lines changed: 12 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + |
Lines changed: 13 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + |
Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
0 commit comments
Comments
(0)