VM Scheduler
What It Does
Section titled “What It Does”The VM scheduler manages the Pexip Infinity VMs by starting them during service hours and deallocating them outside service hours. This reduces Azure compute costs while keeping the Verify-by-Video service available during operating hours.
The active production scheduler is the Azure Function App
func-pexip-vm-scheduler-prod. The older GitHub Actions VM scheduling
workflows are deprecated and should remain disabled unless the Function App
scheduler is intentionally rolled back.
Managed VMs
Section titled “Managed VMs”| Environment | Management Node | Conference Node |
|---|---|---|
| Test | vm-node-mgmt-test | vm-node-conf-test |
| Production | vm-node-mgmt-core | vm-node-conf-core |
Production scheduling targets:
vm-node-mgmt-coreinRG-NODE-MANAGEMENTvm-node-conf-coreinRG-NODE-CONFERENCE
Schedule
Section titled “Schedule”The production scheduler uses the Azure Functions NCRONTAB expression:
0 5,25,35,55 * * * *This runs at :05, :25, :35, and :55 every hour. Service hours are read
from the IAS /video/v2/service_hours endpoint and evaluated with the
scheduler’s pre/post service-hours buffer.
For example, if service hours are 07:00-17:00 America/Vancouver and the
scheduler uses a 1-hour buffer, the target VM-on window is 06:00-18:00
Pacific. Because the timer runs at fixed minutes, the practical start and stop
actions usually occur on the first scheduler run after the boundary, such as
06:05 and 18:05.
Pausing The Schedule
Section titled “Pausing The Schedule”During maintenance windows, disable only the timer function so the Function App does not automatically start or deallocate VMs. This keeps the HTTP manual trigger available for one-off operations.
az functionapp config appsettings set \ --resource-group rg-application \ --name func-pexip-vm-scheduler-prod \ --settings AzureWebJobs.timer_scheduler.Disabled=trueConfirm the app setting:
az functionapp config appsettings list \ --resource-group rg-application \ --name func-pexip-vm-scheduler-prod \ --query "[?name=='AzureWebJobs.timer_scheduler.Disabled']"If the Function App should be fully stopped, use the Azure Portal or az functionapp stop, but note that this also disables manual HTTP operations.
Resuming The Schedule
Section titled “Resuming The Schedule”Re-enable the timer function after the maintenance window:
az functionapp config appsettings set \ --resource-group rg-application \ --name func-pexip-vm-scheduler-prod \ --settings AzureWebJobs.timer_scheduler.Disabled=falseConfirm that timer_scheduler appears in the function list:
az functionapp function list \ --resource-group rg-application \ --name func-pexip-vm-scheduler-prod \ --query "[].name" \ -o tableManual Operations
Section titled “Manual Operations”The Function App exposes a manual HTTP trigger for controlled one-off actions. Use this during maintenance if the VMs need to remain on outside service hours.
Supported actions:
| Action | Effect |
|---|---|
scale_up | Starts the configured VMs without running the longer post-start workflow |
scale_down | Deallocates the configured VMs |
post_start | Runs the downstream post-start workflow separately |
Manual operations require the Function App key and should be run only by authorized operators.
Deprecated Workflow Files
Section titled “Deprecated Workflow Files”The old workflow files still exist in the repository for history:
| Workflow | Previous Environment | Status |
|---|---|---|
vm-start-stop-test.yml | Test | Deprecated |
vm-start-stop-prod.yml | Production | Deprecated |
Do not re-enable these workflows unless the scheduler Function App has been intentionally disabled as part of a rollback.
Test Scheduler
Section titled “Test Scheduler”If a test Function App such as pexip-vm-scheduler-test-func exists in Azure,
confirm whether it is still required for test VM scheduling. It should either be
documented as the active test scheduler or decommissioned if it was only used for
validation.