Azure: как я могу убедиться, что Runbook вызывает только один раз на сервер

У меня есть виртуальные машины на Azure. Каждый мастер vm имеет несколько вычислительных узлов, на которых работает Slurm.

Когда задание завершено, вычислительные узлы, удаленные сценарием завершения работы Slurm, и мастер продолжают работать. Я тоже хочу выключить мастер.

Я создал Azure Runbook, который завершил работу главного сервера. Я могу добавить строку в скрипт, который закрывает вычислительные узлы, чтобы вызвать этот Runbook.

Эта проблема:

Каждый вычислительный узел отправит запрос на отключение своего мастера, что одинаково для нескольких вычислительных узлов. Зачем отправлять один и тот же запрос много раз.

Есть ли способ узнать в Runbook, что был получен запрос на отключение определенного мастера, и пропустить все остальные запросы на отключение того же мастера. Могу ли я заблокировать Runbook или включить флаг, что запрос был отправлен?

Благодарю.

1 ответ

Решение

Возможно, самое простое - использовать переменные автоматизации, например:

$alreadySent = Get-AutomationVariable -Name ShutdownRequestSent
if (-not $alreadySent) {
    # Send shutdown request
    ...
    Set-AutomationVariable -Name ShutdownRequestSent -Value $true
}

Вам придется выяснить, когда и как снова сбросить переменную в $ false.

Это простое, но не пуленепробиваемое решение, и в вашем случае его может быть недостаточно. Например, если два задания для этой книги запусков достигают команды Get-AutomationVariable в одно и то же время, они оба отправят запрос на отключение. Или, если задание, отправляющее запрос на отключение, по какой-либо причине вылетает перед выполнением Set-AutomationVariable, следующее задание отправит второй запрос на отключение. Я не знаю, если это проблема для вас. Если вам нужна более надежная гарантия однократного запуска, рассмотрите возможность использования Lease Blob.

Другие вопросы по тегам