Skip to content

Commit 9b88294

Browse files
minhsuanleeSam Lee
andauthored
[Az.Migrate] Stabilize command internals & update policy defaults (#28869)
Co-authored-by: Sam Lee <[email protected]>
1 parent 1951454 commit 9b88294

24 files changed

+3888
-1422
lines changed

src/Migrate/Migrate.Autorest/custom/Get-AzMigrateLocalJob.ps1

Lines changed: 58 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ function Get-AzMigrateLocalJob {
126126
)
127127

128128
process {
129+
$helperPath = [System.IO.Path]::Combine($PSScriptRoot, "Helper", "AzLocalCommonSettings.ps1")
130+
Import-Module $helperPath
131+
$helperPath = [System.IO.Path]::Combine($PSScriptRoot, "Helper", "AzLocalCommonHelper.ps1")
132+
Import-Module $helperPath
133+
129134
$parameterSet = $PSCmdlet.ParameterSetName
130135
$null = $PSBoundParameters.Remove('ID')
131136
$null = $PSBoundParameters.Remove('ResourceGroupName')
@@ -135,55 +140,82 @@ function Get-AzMigrateLocalJob {
135140
$null = $PSBoundParameters.Remove('ResourceGroupID')
136141
$null = $PSBoundParameters.Remove('ProjectID')
137142

138-
if (($parameterSet -match 'Name') -or ($parameterSet -eq 'ListById')) {
139-
if ($parameterSet -eq 'ListById') {
143+
# Set common ErrorVariable and ErrorAction for get behaviors
144+
$null = $PSBoundParameters.Add('ErrorVariable', 'notPresent')
145+
$null = $PSBoundParameters.Add('ErrorAction', 'SilentlyContinue')
146+
147+
if (($parameterSet -match 'Name') -or ($parameterSet -eq 'ListById'))
148+
{
149+
if ($parameterSet -eq 'ListById')
150+
{
140151
$ProjectIdArray = $ProjectID.Split("/")
141-
if ($ProjectIdArray.Length -lt 9) {
142-
throw "Invalid Project ID '$ProjectID'"
152+
if ($ProjectIdArray.Length -lt 9)
153+
{
154+
throw New-InvalidResourceIdProvidedException `
155+
-ResourceId $ProjectID `
156+
-ResourceType "MigrateProject" `
157+
-Format $IdFormats.MigrateProjectArmIdTemplate
143158
}
144159
$ProjectName = $ProjectIdArray[8]
145160
$ResourceGroupName = $ResourceGroupID.Split("/")[4]
146161
}
162+
163+
# Get the migrate solution with ResourceGroupName, Name, ProjectName
164+
$amhSolutionName = $AzMigrateSolutions.DataReplicationSolution
147165
$null = $PSBoundParameters.Add("ResourceGroupName", $ResourceGroupName)
148-
$null = $PSBoundParameters.Add("Name", "Servers-Migration-ServerMigration_DataReplication")
166+
$null = $PSBoundParameters.Add("Name", $amhSolutionName)
149167
$null = $PSBoundParameters.Add("MigrateProjectName", $ProjectName)
150-
151-
$solution = Az.Migrate\Get-AzMigrateSolution @PSBoundParameters
152-
if ($solution -and ($solution.Count -ge 1)) {
153-
$vaultId = $solution.DetailExtendedDetail["vaultId"]
154-
$vaultIdArray = $vaultId.Split("/")
155-
if ($vaultIdArray.Length -lt 9) {
156-
throw "Invalid Vault ID '$vaultId'"
157-
}
158-
$vaultName = $vaultIdArray[8]
168+
$solution = Az.Migrate.private\Get-AzMigrateSolution_Get @PSBoundParameters
169+
if ($null -eq $solution)
170+
{
171+
throw New-AzMigrateSolutionNotFoundException `
172+
-Name $amhSolutionName `
173+
-ResourceGroupName $ResourceGroupName `
174+
-ProjectName $ProjectName
159175
}
160-
else {
161-
throw "Solution not found."
162-
}
163-
164-
$null = $PSBoundParameters.Remove("ResourceGroupName")
165-
$null = $PSBoundParameters.Remove("Name")
166176
$null = $PSBoundParameters.Remove("MigrateProjectName")
177+
$null = $PSBoundParameters.Remove("Name")
178+
$null = $PSBoundParameters.Remove("ResourceGroupName")
179+
180+
$vaultId = $solution.DetailExtendedDetail["vaultId"]
181+
$vaultIdArray = $vaultId.Split("/")
182+
if ($vaultIdArray.Length -lt 9)
183+
{
184+
throw New-ReplicationVaultNotFoundInAMHSolutionException -VaultId $vaultId
185+
}
186+
$vaultName = $vaultIdArray[8]
167187
}
168-
else {
169-
if ($parameterSet -eq 'GetByInputObject') {
188+
else
189+
{
190+
if ($parameterSet -eq 'GetByInputObject')
191+
{
170192
$ID = $InputObject.Id
171193
}
172194
$jobIdArray = $ID.split('/')
173-
if ($jobIdArray.Length -lt 11) {
174-
throw "Invalid Job ID '$ID'"
195+
if ($jobIdArray.Length -lt 11)
196+
{
197+
throw New-InvalidResourceIdProvidedException `
198+
-ResourceId $ID `
199+
-ResourceType "Job" `
200+
-Format $IdFormats.ToLocalJobArmIdTemplate
175201
}
176202
$ResourceGroupName = $jobIdArray[4]
177203
$vaultName = $jobIdArray[8]
178204
$Name = $jobIdArray[10]
179205
}
180206

207+
# Get job with ResourceGroupName, VaultName, JobName
181208
$null = $PSBoundParameters.Add('ResourceGroupName', $ResourceGroupName)
182209
$null = $PSBoundParameters.Add('VaultName', $vaultName)
183-
if ($parameterSet -match 'Get') {
210+
if ($parameterSet -match 'Get')
211+
{
184212
$null = $PSBoundParameters.Add('JobName', $Name)
185213
}
186214

187-
return Az.Migrate.Internal\Get-AzMigrateLocalReplicationJob @PSBoundParameters -ErrorVariable notPresent -ErrorAction SilentlyContinue
215+
# Remove common ErrorVariable and ErrorAction for get behaviors
216+
$null = $PSBoundParameters.Remove('ErrorVariable')
217+
$null = $PSBoundParameters.Remove('ErrorAction')
218+
219+
return Az.Migrate.Internal\Get-AzMigrateLocalReplicationJob @PSBoundParameters
188220
}
189221
}

src/Migrate/Migrate.Autorest/custom/Get-AzMigrateLocalServerReplication.ps1

Lines changed: 106 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -152,24 +152,45 @@ function Get-AzMigrateLocalServerReplication {
152152
$null = $PSBoundParameters.Remove('ProjectID')
153153
$null = $PSBoundParameters.Remove('MachineName')
154154

155+
# Set common ErrorVariable and ErrorAction for get behaviors
156+
$null = $PSBoundParameters.Add('ErrorVariable', 'notPresent')
157+
$null = $PSBoundParameters.Add('ErrorAction', 'SilentlyContinue')
158+
155159
# Validate ARM ID format from inputs
156-
if ($hasTargetObjectId -and !(Test-AzureResourceIdFormat -Data $TargetObjectID -Format $IdFormats.ProtectedItemArmIdTemplate)) {
157-
throw "Invalid -TargetObjectID '$TargetObjectID'. A valid protected item ARM ID should follow the format '$($IdFormats.ProtectedItemArmIdTemplate)'."
160+
if ($hasTargetObjectId -and !(Test-AzureResourceIdFormat -Data $TargetObjectID -Format $IdFormats.ProtectedItemArmIdTemplate))
161+
{
162+
throw New-InvalidResourceIdProvidedException `
163+
-ResourceId $TargetObjectID `
164+
-ResourceType "ProtectedItem" `
165+
-Format $IdFormats.ProtectedItemArmIdTemplate
158166
}
159167

160-
if ($hasDiscoveredMachineId -and !(Test-AzureResourceIdFormat -Data $DiscoveredMachineId -Format $IdFormats.MachineArmIdTemplate)) {
161-
throw "Invalid -DiscoveredMachineId '$DiscoveredMachineId'. A valid machine ARM ID should follow the format '$($IdFormats.MachineArmIdTemplate)'."
168+
if ($hasDiscoveredMachineId -and !(Test-AzureResourceIdFormat -Data $DiscoveredMachineId -Format $IdFormats.MachineArmIdTemplate))
169+
{
170+
throw New-InvalidResourceIdProvidedException `
171+
-ResourceId $DiscoveredMachineId `
172+
-ResourceType "DiscoveredMachine" `
173+
-Format $IdFormats.MachineArmIdTemplate
162174
}
163175

164-
if ($hasResourceGroupId -and !(Test-AzureResourceIdFormat -Data $ResourceGroupID -Format $IdFormats.ResourceGroupArmIdTemplate)) {
165-
throw "Invalid -ResourceGroupID '$ResourceGroupID'. A valid resource group ARM ID should follow the format '$($IdFormats.ResourceGroupArmIdTemplate)'."
176+
if ($hasResourceGroupId -and !(Test-AzureResourceIdFormat -Data $ResourceGroupID -Format $IdFormats.ResourceGroupArmIdTemplate))
177+
{
178+
throw New-InvalidResourceIdProvidedException `
179+
-ResourceId $ResourceGroupID `
180+
-ResourceType "ResourceGroup" `
181+
-Format $IdFormats.ResourceGroupArmIdTemplate
166182
}
167183

168-
if ($hasProjectId -and !(Test-AzureResourceIdFormat -Data $ProjectID -Format $IdFormats.MigrateProjectArmIdTemplate)) {
169-
throw "Invalid -ProjectID '$ProjectID'. A valid migrate project ARM ID should follow the format '$($IdFormats.MigrateProjectArmIdTemplate)'."
184+
if ($hasProjectId -and !(Test-AzureResourceIdFormat -Data $ProjectID -Format $IdFormats.MigrateProjectArmIdTemplate))
185+
{
186+
throw New-InvalidResourceIdProvidedException `
187+
-ResourceId $ProjectID `
188+
-ResourceType "MigrateProject" `
189+
-Format $IdFormats.MigrateProjectArmIdTemplate
170190
}
171191

172-
if ($parameterSet -eq 'GetBySDSID') {
192+
if ($parameterSet -eq 'GetBySDSID')
193+
{
173194
# $DiscoveredMachineId is in the format of
174195
# "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.OffAzure/{2}/{3}/machines/{4}"
175196
$machineIdArray = $DiscoveredMachineId.Split("/")
@@ -181,56 +202,70 @@ function Get-AzMigrateLocalServerReplication {
181202
$null = $PSBoundParameters.Add('ResourceGroupName', $ResourceGroupName)
182203
$null = $PSBoundParameters.Add('SiteName', $siteName)
183204

184-
if (($siteType -ne $SiteTypes.HyperVSites) -and ($siteType -ne $SiteTypes.VMwareSites)) {
205+
if (($siteType -ne $SiteTypes.HyperVSites) -and ($siteType -ne $SiteTypes.VMwareSites))
206+
{
185207
throw "Unknown machine site '$siteName' with Type '$siteType'."
186208
}
187209

188-
# Occasionally, Get Machine Site will not return machine site even when the site exist,
189-
# hence retry get machine site.
190-
if ($siteType -eq $SiteTypes.VMwareSites) {
191-
$siteObject = InvokeAzMigrateGetCommandWithRetries `
192-
-CommandName 'Az.Migrate\Get-AzMigrateSite' `
193-
-Parameters $PSBoundParameters `
194-
-ErrorMessage "Machine site '$siteName' with Type '$siteType' not found."
195-
} elseif ($siteType -eq $SiteTypes.HyperVSites) {
196-
$siteObject = InvokeAzMigrateGetCommandWithRetries `
197-
-CommandName 'Az.Migrate.Internal\Get-AzMigrateHyperVSite' `
198-
-Parameters $PSBoundParameters `
199-
-ErrorMessage "Machine site '$siteName' with Type '$siteType' not found."
210+
# Get site with ResourceGroupName and SiteName
211+
if ($siteType -eq $SiteTypes.VMwareSites)
212+
{
213+
$siteObject = Az.Migrate.private\Get-AzMigrateSite_Get @PSBoundParameters
214+
} elseif ($siteType -eq $SiteTypes.HyperVSites)
215+
{
216+
$siteObject = Az.Migrate.Internal\Get-AzMigrateHyperVSite @PSBoundParameters
217+
}
218+
219+
if ($null -eq $siteObject)
220+
{
221+
throw New-AzMigrateSiteNotFoundException `
222+
-Name $siteName `
223+
-ResourceGroupName $ResourceGroupName `
224+
-SiteType $siteType
200225
}
226+
$null = $PSBoundParameters.Remove('SiteName')
201227

202228
# $siteObject is not null or exception would have been thrown
203229
$ProjectName = $siteObject.DiscoverySolutionId.Split("/")[8]
204230

205-
$null = $PSBoundParameters.Remove('SiteName')
206-
207-
# Get the migrate solution.
208-
$amhSolutionName = "Servers-Migration-ServerMigration_DataReplication"
231+
# Get the migrate solution with ResourceGroupName, Name, MigrateProjectName
232+
$amhSolutionName = $AzMigrateSolutions.DataReplicationSolution
209233
$null = $PSBoundParameters.Add("Name", $amhSolutionName)
210234
$null = $PSBoundParameters.Add("MigrateProjectName", $ProjectName)
211-
212-
$solution = InvokeAzMigrateGetCommandWithRetries `
213-
-CommandName 'Az.Migrate\Get-AzMigrateSolution' `
214-
-Parameters $PSBoundParameters `
215-
-ErrorMessage "No Data Replication Service Solution '$amhSolutionName' found in resource group '$ResourceGroupName' and project '$ProjectName'. Please verify your appliance setup."
216-
217-
$null = $PSBoundParameters.Remove("Name")
235+
$solution = Az.Migrate.private\Get-AzMigrateSolution_Get @PSBoundParameters
236+
if ($null -eq $solution)
237+
{
238+
throw New-AzMigrateSolutionNotFoundException `
239+
-Name $amhSolutionName `
240+
-ResourceGroupName $ResourceGroupName `
241+
-ProjectName $ProjectName
242+
}
218243
$null = $PSBoundParameters.Remove("MigrateProjectName")
244+
$null = $PSBoundParameters.Remove("Name")
219245

220-
$VaultName = $solution.DetailExtendedDetail.AdditionalProperties.vaultId.Split("/")[8]
221-
if ([string]::IsNullOrEmpty($VaultName)) {
222-
throw "Azure Migrate Project not configured: missing replication vault. Setup Azure Migrate Project and run the Initialize-AzMigrateLocalReplicationInfrastructure script before proceeding."
246+
$vaultId = $solution.DetailExtendedDetail["vaultId"]
247+
$vaultIdArray = $vaultId.Split("/")
248+
if ($vaultIdArray.Length -lt 9)
249+
{
250+
throw New-ReplicationVaultNotFoundInAMHSolutionException -VaultId $vaultId
223251
}
252+
$VaultName = $vaultIdArray[8]
253+
254+
# Remove common ErrorVariable and ErrorAction for get behaviors
255+
$null = $PSBoundParameters.Remove('ErrorVariable')
256+
$null = $PSBoundParameters.Remove('ErrorAction')
224257

258+
# Get protected item with ResourceGroupName, VaultName, ProtectedItemName
225259
$null = $PSBoundParameters.Add("VaultName", $VaultName)
226260
$null = $PSBoundParameters.Add("Name", $ProtectedItemName)
227-
228261
return Az.Migrate.Internal\Get-AzMigrateProtectedItem @PSBoundParameters
229262
}
230263

231-
if (($parameterSet -match 'List') -or ($parameterSet -eq 'GetByMachineName')) {
264+
if (($parameterSet -match 'List') -or ($parameterSet -eq 'GetByMachineName'))
265+
{
232266
# Retrieve ResourceGroupName, ProjectName if ListByID
233-
if ($parameterSet -eq 'ListByID') {
267+
if ($parameterSet -eq 'ListByID')
268+
{
234269
# $ResourceGroupID is in the format of "/subscriptions/{0}/resourceGroups/{1}"
235270
$resourceGroupIdArray = $ResourceGroupID.Split('/')
236271
$ResourceGroupName = $resourceGroupIdArray[4] # {1}
@@ -241,26 +276,36 @@ function Get-AzMigrateLocalServerReplication {
241276
$ProjectName = $projectIdArray[8] # {2}
242277
}
243278

244-
$amhSolutionName = "Servers-Migration-ServerMigration_DataReplication"
279+
# Get the migrate solution with ResourceGroupName, Name, MigrateProjectName
280+
$amhSolutionName = $AzMigrateSolutions.DataReplicationSolution
245281
$null = $PSBoundParameters.Add("ResourceGroupName", $ResourceGroupName)
246282
$null = $PSBoundParameters.Add("Name", $amhSolutionName)
247283
$null = $PSBoundParameters.Add("MigrateProjectName", $ProjectName)
248-
249-
$solution = InvokeAzMigrateGetCommandWithRetries `
250-
-CommandName 'Az.Migrate\Get-AzMigrateSolution' `
251-
-Parameters $PSBoundParameters `
252-
-ErrorMessage "No Data Replication Service Solution '$amhSolutionName' found in resource group '$ResourceGroupName' and project '$ProjectName'. Please verify your appliance setup."
253-
254-
$null = $PSBoundParameters.Remove("Name")
284+
$solution = Az.Migrate.private\Get-AzMigrateSolution_Get @PSBoundParameters
285+
if ($null -eq $solution)
286+
{
287+
throw New-AzMigrateSolutionNotFoundException `
288+
-Name $amhSolutionName `
289+
-ResourceGroupName $ResourceGroupName `
290+
-ProjectName $ProjectName
291+
}
255292
$null = $PSBoundParameters.Remove("MigrateProjectName")
293+
$null = $PSBoundParameters.Remove("Name")
256294

257-
$VaultName = $solution.DetailExtendedDetail.AdditionalProperties.vaultId.Split("/")[8]
258-
if ([string]::IsNullOrEmpty($VaultName)) {
259-
throw "Azure Migrate Project not configured: missing replication vault. Setup Azure Migrate Project and run the Initialize-AzMigrateLocalReplicationInfrastructure script before proceeding."
295+
$vaultId = $solution.DetailExtendedDetail["vaultId"]
296+
$vaultIdArray = $vaultId.Split("/")
297+
if ($vaultIdArray.Length -lt 9)
298+
{
299+
throw New-ReplicationVaultNotFoundInAMHSolutionException -VaultId $vaultId
260300
}
301+
$VaultName = $vaultIdArray[8]
261302

303+
# Remove common ErrorVariable and ErrorAction for get behaviors
304+
$null = $PSBoundParameters.Remove('ErrorVariable')
305+
$null = $PSBoundParameters.Remove('ErrorAction')
306+
307+
# Get protected item with ResourceGroupName, VaultName then filter
262308
$null = $PSBoundParameters.Add("VaultName", $VaultName)
263-
264309
$replicatingItems = Az.Migrate.Internal\Get-AzMigrateProtectedItem @PSBoundParameters
265310

266311
if ($parameterSet -eq "GetByMachineName") {
@@ -269,8 +314,10 @@ function Get-AzMigrateLocalServerReplication {
269314
return $replicatingItems
270315
}
271316

272-
if (($parameterSet -eq "GetByInputObject") -or ($parameterSet -eq "GetByItemID")) {
273-
if ($parameterSet -eq 'GetByInputObject') {
317+
if (($parameterSet -eq "GetByInputObject") -or ($parameterSet -eq "GetByItemID"))
318+
{
319+
if ($parameterSet -eq 'GetByInputObject')
320+
{
274321
$TargetObjectID = $InputObject.Id
275322
}
276323

@@ -280,10 +327,15 @@ function Get-AzMigrateLocalServerReplication {
280327
$ResourceGroupName = $objectIdArray[4] # {1}
281328
$VaultName = $objectIdArray[8] # {2}
282329
$ProtectedItemName = $objectIdArray[10] # {3}
330+
331+
# Remove common ErrorVariable and ErrorAction for get behaviors
332+
$null = $PSBoundParameters.Remove('ErrorVariable')
333+
$null = $PSBoundParameters.Remove('ErrorAction')
334+
335+
# Get protected item with ResourceGroupName, VaultName, ProtectedItemName
283336
$null = $PSBoundParameters.Add("ResourceGroupName", $ResourceGroupName)
284337
$null = $PSBoundParameters.Add("VaultName", $VaultName)
285338
$null = $PSBoundParameters.Add("Name", $ProtectedItemName)
286-
287339
return Az.Migrate.Internal\Get-AzMigrateProtectedItem @PSBoundParameters
288340
}
289341
}

0 commit comments

Comments
 (0)