2.Image.Builder/Windows/terminate.ps1 (22 lines of code) (raw):
$metadataUrl = "http://169.254.169.254/metadata"
$eventsUrl = "$metadataUrl/scheduledevents?api-version=2020-07-01"
$vmNameUrl = "$metadataUrl/instance/compute/name?api-version=2021-12-13&format=text"
$scheduledEvents = (Invoke-RestMethod -Headers @{"Metadata"="true"} -Uri $eventsUrl).Events
foreach ($scheduledEvent in $scheduledEvents) {
$eventType = $scheduledEvent.EventType
if ($eventType -eq "Preempt" -or $eventType -eq "Terminate") {
$eventScope = $scheduledEvent.Resources[0]
$instanceName = Invoke-RestMethod -Headers @{"Metadata"="true"} -Uri $vmNameUrl
if ($eventScope -eq $instanceName) {
deadlineworker -shutdown
deadlinecommand -DeleteSlave $(hostname)
$eventId = $scheduledEvent.eventId
$requestBody = "{\"StartRequests\":[{\"EventId\":\"$eventId\"}]}"
$requestHeaders = @{
"Content-Type" = "application/json"
"Metadata" = "true"
}
Invoke-WebRequest -UseBasicParsing -Headers $requestHeaders -Uri $eventsUrl -Body $requestBody -Method Post
}
}
}