Мне нужно использовать Azure управление обновлениями, и я столкнулся с ситуацией, когда мне нужно использовать Pre-Script / Post-Script для обеспечения высокой доступности
Real Scénario:
Некоторые виртуальные машины находятся за бэкэнд-пулами Loadbalancer. Каждый BackEnd имеет 2 виртуальные машины, которые выполняют одну и ту же роль, для обеспечения высокой доступности я должен:
[PreScript:remove one VM from LB Backend]==>[patch it]==>[PostScript:return it back to the right original LB Backend]
Итак, процесс управления обновлениями выглядит следующим образом:
Prescript==>OS-patch==>Postscript
До сих пор я готовлю рабочий PreScript
Теперь задача состоит в том, чтобы вернуть каждую виртуальную машину нужному LoadBalancer, я могу вернуть одну виртуальную машину, но при зацикливании на всех виртуальных машинах скрипт завершается неудачно, Я думал о том, чтобы извлечь отчет о мониторинге в файл CSV, хранящийся в Azure Storage, но я не смог связать следующую информацию в таблице форматов (LoadBalancerName, BackendName, VM1, VM2, ...),
Поэтому я спрашиваю, был ли у кого-то такой же опыт или какие-либо предложения?
=========================== ========== Bad Script =========================================== ==
#$lbs = Get-AzLoadBalancer
#foreach($lb in $lbs){
# #ForEach-Object {
$lbname = ($lb).Name
$bename = ($lb).BackendAddressPools.Name
#$nic = $be_ids.Substring($be_ids.ToString().LastIndexOf('/', '+8'))
}
foreach($be in $bename){
$beconf = Get-AzLoadBalancerBackendAddressPoolConfig -Name $be -LoadBalancer $lb
$be_ids = ($beconf).BackendAddressPools.BackendIpConfigurations.Id
$nic = $be_ids.substring($be_ids.ToString().LastIndexOf('/', 8)+1)
#$nic = $be_ids.Substring($be_ids.ToString().LastIndexOf('/', 8)+1)
#$nic = $be_ids.ToString.Split('/')[+8]
}
Write-Output $be_ids $nic $beconf $lbname, $bename, | Sort-Object $lbname | FT$lbs = Get-AzLoadBalancer
foreach($lb in $lbs){
#ForEach-Object {
$lbname = ($lb).Name
$bename = ($lb).BackendAddressPools.Name
#$nic = $be_ids.Substring($be_ids.ToString().LastIndexOf('/', '+8'))
}
foreach($be in $bename){
# $beconf = Get-AzLoadBalancerBackendAddressPoolConfig -Name $be -LoadBalancer $lb
# $be_ids = ($beconf).BackendAddressPools.BackendIpConfigurations.Id
# $nic = $be_ids.substring($be_ids.ToString().LastIndexOf('/', 8)+1)
# #$nic = $be_ids.Substring($be_ids.ToString().LastIndexOf('/', 8)+1)
# #$nic = $be_ids.ToString.Split('/')[+8]
#
#}
#Write-Output $be_ids $nic $beconf $lbname, $bename, | Sort-Object $lbname | FT