From 098c9fd02146def15ce47928a222376fea76196c Mon Sep 17 00:00:00 2001 From: Matthew Bratschun Date: Wed, 20 Aug 2025 18:13:25 -0600 Subject: [PATCH] fix avset mixed vm pip no pip upgrade --- .../AzureAvSetBasicPublicIPUpgrade.psd1 | 4 +- .../AzureAvSetBasicPublicIPUpgrade.psm1 | 5 +- .../scenarios/006-vms-mixed-pip.bicep | 163 ++++++++++++++++++ 3 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 AzureAvSetBasicPublicIPUpgrade/testEnvs/scenarios/006-vms-mixed-pip.bicep diff --git a/AzureAvSetBasicPublicIPUpgrade/module/AzureAvSetBasicPublicIPUpgrade/AzureAvSetBasicPublicIPUpgrade.psd1 b/AzureAvSetBasicPublicIPUpgrade/module/AzureAvSetBasicPublicIPUpgrade/AzureAvSetBasicPublicIPUpgrade.psd1 index 4745d8e2..4c323f3e 100644 --- a/AzureAvSetBasicPublicIPUpgrade/module/AzureAvSetBasicPublicIPUpgrade/AzureAvSetBasicPublicIPUpgrade.psd1 +++ b/AzureAvSetBasicPublicIPUpgrade/module/AzureAvSetBasicPublicIPUpgrade/AzureAvSetBasicPublicIPUpgrade.psd1 @@ -12,7 +12,7 @@ RootModule = 'AzureAvSetBasicPublicIPUpgrade' # Version number of this module. -ModuleVersion = '1.0.0' +ModuleVersion = '1.0.1' # Supported PSEditions # CompatiblePSEditions = @() @@ -107,7 +107,7 @@ PrivateData = @{ # IconUri = '' # ReleaseNotes of this module - ReleaseNotes = 'NSG detection improvements, recovery fixes' + ReleaseNotes = 'Fix mixed VM/PIP scenario handling' # Prerelease string of this module # Prerelease = '' diff --git a/AzureAvSetBasicPublicIPUpgrade/module/AzureAvSetBasicPublicIPUpgrade/AzureAvSetBasicPublicIPUpgrade.psm1 b/AzureAvSetBasicPublicIPUpgrade/module/AzureAvSetBasicPublicIPUpgrade/AzureAvSetBasicPublicIPUpgrade.psm1 index e6248849..8b93b991 100644 --- a/AzureAvSetBasicPublicIPUpgrade/module/AzureAvSetBasicPublicIPUpgrade/AzureAvSetBasicPublicIPUpgrade.psm1 +++ b/AzureAvSetBasicPublicIPUpgrade/module/AzureAvSetBasicPublicIPUpgrade/AzureAvSetBasicPublicIPUpgrade.psm1 @@ -220,8 +220,9 @@ Function Start-AzAvSetPublicIPUpgrade { } If ($VM.publicIPIPConfigAssociations.count -lt 1) { - Add-LogEntry "VM '$($VM.vmObject.Name)' does not have any public IP addresses attached. Skipping upgrade." -severity WARNING - return + Add-LogEntry "VM '$($VM.vmObject.Name)' does not have any public IP addresses attached. Skipping upgrading this VM." -severity INFO + $VMs = $VMs | Where-Object { $_.vmObject.Id -ne $VM.vmObject.Id } + continue } Else { Add-LogEntry "VM '$($VM.vmObject.Name)' has $($VM.publicIPIPConfigAssociations.count) public IP addresses attached." diff --git a/AzureAvSetBasicPublicIPUpgrade/testEnvs/scenarios/006-vms-mixed-pip.bicep b/AzureAvSetBasicPublicIPUpgrade/testEnvs/scenarios/006-vms-mixed-pip.bicep new file mode 100644 index 00000000..b80a7c0f --- /dev/null +++ b/AzureAvSetBasicPublicIPUpgrade/testEnvs/scenarios/006-vms-mixed-pip.bicep @@ -0,0 +1,163 @@ +targetScope = 'subscription' +param location string +param resourceGroupName string +param randomGuid string = newGuid() + +// Resource Group +module rg '../modules/Microsoft.Resources/resourceGroups/deploy.bicep' = { + name: '${resourceGroupName}-${location}' + params: { + name: resourceGroupName + location: location + } +} + +// vnet +module virtualNetworks '../modules/Microsoft.Network/virtualNetworks/deploy.bicep' = { + name: '${uniqueString(deployment().name)}-virtualNetworks' + scope: resourceGroup(resourceGroupName) + params: { + // Required parameters + location: location + addressPrefixes: [ + '10.0.0.0/16' + ] + name: 'vnet-01' + subnets: [ + { + name: 'subnet-01' + addressPrefix: '10.0.1.0/24' + } + ] + } + dependsOn: [ + rg + ] +} + +module storageAccounts '../modules/Microsoft.Storage/storageAccounts/deploy.bicep' = { + name: 'bootdiag-storage-01' + scope: resourceGroup(resourceGroupName) + params: { + name: 'bootdiag${uniqueString(deployment().name)}' + location: location + storageAccountSku: 'Standard_LRS' + storageAccountKind: 'StorageV2' + supportsHttpsTrafficOnly: true + } + dependsOn: [ + rg + ] +} + +module nsg '../modules/Microsoft.Network/networkSecurityGroups/deploy.bicep' = { + scope: resourceGroup(resourceGroupName) + name: 'nsg-01' + params: { + name: 'nsg-01' + location: location + } + dependsOn: [ rg ] +} + +module availabilitySets '../modules/Microsoft.Compute/availabilitySets/deploy.bicep' = { + scope: resourceGroup(resourceGroupName) + name: 'avset-01' + params: { + name: 'avset-01' + location: location + } + dependsOn: [ + rg + ] +} + +module vm1 '../modules/Microsoft.Compute/virtualMachines_custom/deploy.bicep' = { + scope: resourceGroup(resourceGroupName) + name: 'vm-01' + params: { + adminUsername: 'admin-vm' + name: 'vm-01' + adminPassword: '${uniqueString(randomGuid)}rpP@340' + availabilitySetResourceId: availabilitySets.outputs.resourceId + location: location + imageReference: { + offer: 'UbuntuServer' + publisher: 'Canonical' + sku: '18.04-LTS' + version: 'latest' + } + nicConfigurations: [ + { + location: location + ipConfigurations: [ + { + name: 'ipconfig1' + subnetResourceId: virtualNetworks.outputs.subnetResourceIds[0] + loadBalancerBackendAddressPools: [] + pipConfiguration: { + publicIpNameSuffix: '-pip-01' + } + skuName: 'Basic' + networkSecurityGroup: nsg.outputs.resourceId + } + + ] + nicSuffix: 'nic' + enableAcceleratedNetworking: false + } + ] + osDisk: { + createOption: 'fromImage' + diskSizeGB: '128' + managedDisk: { + storageAccountType: 'Standard_LRS' + } + } + osType: 'Linux' + vmSize: 'Standard_DS1_v2' + } +} + +module vm2 '../modules/Microsoft.Compute/virtualMachines_custom/deploy.bicep' = { + scope: resourceGroup(resourceGroupName) + name: 'vm-02' + params: { + name: 'vm-02' + adminUsername: 'admin-vm' + adminPassword: '${uniqueString(randomGuid)}rpP@340' + availabilitySetResourceId: availabilitySets.outputs.resourceId + location: location + imageReference: { + offer: 'UbuntuServer' + publisher: 'Canonical' + sku: '18.04-LTS' + version: 'latest' + } + nicConfigurations: [ + { + location: location + ipConfigurations: [ + { + name: 'ipconfig1' + subnetResourceId: virtualNetworks.outputs.subnetResourceIds[0] + loadBalancerBackendAddressPools: [] + skuName: 'Basic' + networkSecurityGroup: nsg.outputs.resourceId + } + ] + nicSuffix: 'nic' + enableAcceleratedNetworking: false + } + ] + osDisk: { + createOption: 'fromImage' + diskSizeGB: '128' + managedDisk: { + storageAccountType: 'Standard_LRS' + } + } + osType: 'Linux' + vmSize: 'Standard_DS1_v2' + } +}