Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 58 additions & 26 deletions src/Migrate/Migrate.Autorest/custom/Get-AzMigrateLocalJob.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,11 @@ function Get-AzMigrateLocalJob {
)

process {
$helperPath = [System.IO.Path]::Combine($PSScriptRoot, "Helper", "AzLocalCommonSettings.ps1")
Import-Module $helperPath
$helperPath = [System.IO.Path]::Combine($PSScriptRoot, "Helper", "AzLocalCommonHelper.ps1")
Import-Module $helperPath

$parameterSet = $PSCmdlet.ParameterSetName
$null = $PSBoundParameters.Remove('ID')
$null = $PSBoundParameters.Remove('ResourceGroupName')
Expand All @@ -135,55 +140,82 @@ function Get-AzMigrateLocalJob {
$null = $PSBoundParameters.Remove('ResourceGroupID')
$null = $PSBoundParameters.Remove('ProjectID')

if (($parameterSet -match 'Name') -or ($parameterSet -eq 'ListById')) {
if ($parameterSet -eq 'ListById') {
# Set common ErrorVariable and ErrorAction for get behaviors
$null = $PSBoundParameters.Add('ErrorVariable', 'notPresent')
$null = $PSBoundParameters.Add('ErrorAction', 'SilentlyContinue')

if (($parameterSet -match 'Name') -or ($parameterSet -eq 'ListById'))
{
if ($parameterSet -eq 'ListById')
{
$ProjectIdArray = $ProjectID.Split("/")
if ($ProjectIdArray.Length -lt 9) {
throw "Invalid Project ID '$ProjectID'"
if ($ProjectIdArray.Length -lt 9)
{
throw New-InvalidResourceIdProvidedException `
-ResourceId $ProjectID `
-ResourceType "MigrateProject" `
-Format $IdFormats.MigrateProjectArmIdTemplate
}
$ProjectName = $ProjectIdArray[8]
$ResourceGroupName = $ResourceGroupID.Split("/")[4]
}

# Get the migrate solution with ResourceGroupName, Name, ProjectName
$amhSolutionName = $AzMigrateSolutions.DataReplicationSolution
$null = $PSBoundParameters.Add("ResourceGroupName", $ResourceGroupName)
$null = $PSBoundParameters.Add("Name", "Servers-Migration-ServerMigration_DataReplication")
$null = $PSBoundParameters.Add("Name", $amhSolutionName)
$null = $PSBoundParameters.Add("MigrateProjectName", $ProjectName)

$solution = Az.Migrate\Get-AzMigrateSolution @PSBoundParameters
if ($solution -and ($solution.Count -ge 1)) {
$vaultId = $solution.DetailExtendedDetail["vaultId"]
$vaultIdArray = $vaultId.Split("/")
if ($vaultIdArray.Length -lt 9) {
throw "Invalid Vault ID '$vaultId'"
}
$vaultName = $vaultIdArray[8]
$solution = Az.Migrate.private\Get-AzMigrateSolution_Get @PSBoundParameters
if ($null -eq $solution)
{
throw New-AzMigrateSolutionNotFoundException `
-Name $amhSolutionName `
-ResourceGroupName $ResourceGroupName `
-ProjectName $ProjectName
}
else {
throw "Solution not found."
}

$null = $PSBoundParameters.Remove("ResourceGroupName")
$null = $PSBoundParameters.Remove("Name")
$null = $PSBoundParameters.Remove("MigrateProjectName")
$null = $PSBoundParameters.Remove("Name")
$null = $PSBoundParameters.Remove("ResourceGroupName")

$vaultId = $solution.DetailExtendedDetail["vaultId"]
$vaultIdArray = $vaultId.Split("/")
if ($vaultIdArray.Length -lt 9)
{
throw New-ReplicationVaultNotFoundInAMHSolutionException -VaultId $vaultId
}
$vaultName = $vaultIdArray[8]
}
else {
if ($parameterSet -eq 'GetByInputObject') {
else
{
if ($parameterSet -eq 'GetByInputObject')
{
$ID = $InputObject.Id
}
$jobIdArray = $ID.split('/')
if ($jobIdArray.Length -lt 11) {
throw "Invalid Job ID '$ID'"
if ($jobIdArray.Length -lt 11)
{
throw New-InvalidResourceIdProvidedException `
-ResourceId $ID `
-ResourceType "Job" `
-Format $IdFormats.ToLocalJobArmIdTemplate
}
$ResourceGroupName = $jobIdArray[4]
$vaultName = $jobIdArray[8]
$Name = $jobIdArray[10]
}

# Get job with ResourceGroupName, VaultName, JobName
$null = $PSBoundParameters.Add('ResourceGroupName', $ResourceGroupName)
$null = $PSBoundParameters.Add('VaultName', $vaultName)
if ($parameterSet -match 'Get') {
if ($parameterSet -match 'Get')
{
$null = $PSBoundParameters.Add('JobName', $Name)
}

return Az.Migrate.Internal\Get-AzMigrateLocalReplicationJob @PSBoundParameters -ErrorVariable notPresent -ErrorAction SilentlyContinue
# Remove common ErrorVariable and ErrorAction for get behaviors
$null = $PSBoundParameters.Remove('ErrorVariable')
$null = $PSBoundParameters.Remove('ErrorAction')

return Az.Migrate.Internal\Get-AzMigrateLocalReplicationJob @PSBoundParameters
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -152,24 +152,45 @@ function Get-AzMigrateLocalServerReplication {
$null = $PSBoundParameters.Remove('ProjectID')
$null = $PSBoundParameters.Remove('MachineName')

# Set common ErrorVariable and ErrorAction for get behaviors
$null = $PSBoundParameters.Add('ErrorVariable', 'notPresent')
$null = $PSBoundParameters.Add('ErrorAction', 'SilentlyContinue')

# Validate ARM ID format from inputs
if ($hasTargetObjectId -and !(Test-AzureResourceIdFormat -Data $TargetObjectID -Format $IdFormats.ProtectedItemArmIdTemplate)) {
throw "Invalid -TargetObjectID '$TargetObjectID'. A valid protected item ARM ID should follow the format '$($IdFormats.ProtectedItemArmIdTemplate)'."
if ($hasTargetObjectId -and !(Test-AzureResourceIdFormat -Data $TargetObjectID -Format $IdFormats.ProtectedItemArmIdTemplate))
{
throw New-InvalidResourceIdProvidedException `
-ResourceId $TargetObjectID `
-ResourceType "ProtectedItem" `
-Format $IdFormats.ProtectedItemArmIdTemplate
}

if ($hasDiscoveredMachineId -and !(Test-AzureResourceIdFormat -Data $DiscoveredMachineId -Format $IdFormats.MachineArmIdTemplate)) {
throw "Invalid -DiscoveredMachineId '$DiscoveredMachineId'. A valid machine ARM ID should follow the format '$($IdFormats.MachineArmIdTemplate)'."
if ($hasDiscoveredMachineId -and !(Test-AzureResourceIdFormat -Data $DiscoveredMachineId -Format $IdFormats.MachineArmIdTemplate))
{
throw New-InvalidResourceIdProvidedException `
-ResourceId $DiscoveredMachineId `
-ResourceType "DiscoveredMachine" `
-Format $IdFormats.MachineArmIdTemplate
}

if ($hasResourceGroupId -and !(Test-AzureResourceIdFormat -Data $ResourceGroupID -Format $IdFormats.ResourceGroupArmIdTemplate)) {
throw "Invalid -ResourceGroupID '$ResourceGroupID'. A valid resource group ARM ID should follow the format '$($IdFormats.ResourceGroupArmIdTemplate)'."
if ($hasResourceGroupId -and !(Test-AzureResourceIdFormat -Data $ResourceGroupID -Format $IdFormats.ResourceGroupArmIdTemplate))
{
throw New-InvalidResourceIdProvidedException `
-ResourceId $ResourceGroupID `
-ResourceType "ResourceGroup" `
-Format $IdFormats.ResourceGroupArmIdTemplate
}

if ($hasProjectId -and !(Test-AzureResourceIdFormat -Data $ProjectID -Format $IdFormats.MigrateProjectArmIdTemplate)) {
throw "Invalid -ProjectID '$ProjectID'. A valid migrate project ARM ID should follow the format '$($IdFormats.MigrateProjectArmIdTemplate)'."
if ($hasProjectId -and !(Test-AzureResourceIdFormat -Data $ProjectID -Format $IdFormats.MigrateProjectArmIdTemplate))
{
throw New-InvalidResourceIdProvidedException `
-ResourceId $ProjectID `
-ResourceType "MigrateProject" `
-Format $IdFormats.MigrateProjectArmIdTemplate
}

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

if (($siteType -ne $SiteTypes.HyperVSites) -and ($siteType -ne $SiteTypes.VMwareSites)) {
if (($siteType -ne $SiteTypes.HyperVSites) -and ($siteType -ne $SiteTypes.VMwareSites))
{
throw "Unknown machine site '$siteName' with Type '$siteType'."
}

# Occasionally, Get Machine Site will not return machine site even when the site exist,
# hence retry get machine site.
if ($siteType -eq $SiteTypes.VMwareSites) {
$siteObject = InvokeAzMigrateGetCommandWithRetries `
-CommandName 'Az.Migrate\Get-AzMigrateSite' `
-Parameters $PSBoundParameters `
-ErrorMessage "Machine site '$siteName' with Type '$siteType' not found."
} elseif ($siteType -eq $SiteTypes.HyperVSites) {
$siteObject = InvokeAzMigrateGetCommandWithRetries `
-CommandName 'Az.Migrate.Internal\Get-AzMigrateHyperVSite' `
-Parameters $PSBoundParameters `
-ErrorMessage "Machine site '$siteName' with Type '$siteType' not found."
# Get site with ResourceGroupName and SiteName
if ($siteType -eq $SiteTypes.VMwareSites)
{
$siteObject = Az.Migrate.private\Get-AzMigrateSite_Get @PSBoundParameters
} elseif ($siteType -eq $SiteTypes.HyperVSites)
{
$siteObject = Az.Migrate.Internal\Get-AzMigrateHyperVSite @PSBoundParameters
}

if ($null -eq $siteObject)
{
throw New-AzMigrateSiteNotFoundException `
-Name $siteName `
-ResourceGroupName $ResourceGroupName `
-SiteType $siteType
}
$null = $PSBoundParameters.Remove('SiteName')

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

$null = $PSBoundParameters.Remove('SiteName')

# Get the migrate solution.
$amhSolutionName = "Servers-Migration-ServerMigration_DataReplication"
# Get the migrate solution with ResourceGroupName, Name, MigrateProjectName
$amhSolutionName = $AzMigrateSolutions.DataReplicationSolution
$null = $PSBoundParameters.Add("Name", $amhSolutionName)
$null = $PSBoundParameters.Add("MigrateProjectName", $ProjectName)

$solution = InvokeAzMigrateGetCommandWithRetries `
-CommandName 'Az.Migrate\Get-AzMigrateSolution' `
-Parameters $PSBoundParameters `
-ErrorMessage "No Data Replication Service Solution '$amhSolutionName' found in resource group '$ResourceGroupName' and project '$ProjectName'. Please verify your appliance setup."

$null = $PSBoundParameters.Remove("Name")
$solution = Az.Migrate.private\Get-AzMigrateSolution_Get @PSBoundParameters
if ($null -eq $solution)
{
throw New-AzMigrateSolutionNotFoundException `
-Name $amhSolutionName `
-ResourceGroupName $ResourceGroupName `
-ProjectName $ProjectName
}
$null = $PSBoundParameters.Remove("MigrateProjectName")
$null = $PSBoundParameters.Remove("Name")

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

# Remove common ErrorVariable and ErrorAction for get behaviors
$null = $PSBoundParameters.Remove('ErrorVariable')
$null = $PSBoundParameters.Remove('ErrorAction')

# Get protected item with ResourceGroupName, VaultName, ProtectedItemName
$null = $PSBoundParameters.Add("VaultName", $VaultName)
$null = $PSBoundParameters.Add("Name", $ProtectedItemName)

return Az.Migrate.Internal\Get-AzMigrateProtectedItem @PSBoundParameters
}

if (($parameterSet -match 'List') -or ($parameterSet -eq 'GetByMachineName')) {
if (($parameterSet -match 'List') -or ($parameterSet -eq 'GetByMachineName'))
{
# Retrieve ResourceGroupName, ProjectName if ListByID
if ($parameterSet -eq 'ListByID') {
if ($parameterSet -eq 'ListByID')
{
# $ResourceGroupID is in the format of "/subscriptions/{0}/resourceGroups/{1}"
$resourceGroupIdArray = $ResourceGroupID.Split('/')
$ResourceGroupName = $resourceGroupIdArray[4] # {1}
Expand All @@ -241,26 +276,36 @@ function Get-AzMigrateLocalServerReplication {
$ProjectName = $projectIdArray[8] # {2}
}

$amhSolutionName = "Servers-Migration-ServerMigration_DataReplication"
# Get the migrate solution with ResourceGroupName, Name, MigrateProjectName
$amhSolutionName = $AzMigrateSolutions.DataReplicationSolution
$null = $PSBoundParameters.Add("ResourceGroupName", $ResourceGroupName)
$null = $PSBoundParameters.Add("Name", $amhSolutionName)
$null = $PSBoundParameters.Add("MigrateProjectName", $ProjectName)

$solution = InvokeAzMigrateGetCommandWithRetries `
-CommandName 'Az.Migrate\Get-AzMigrateSolution' `
-Parameters $PSBoundParameters `
-ErrorMessage "No Data Replication Service Solution '$amhSolutionName' found in resource group '$ResourceGroupName' and project '$ProjectName'. Please verify your appliance setup."

$null = $PSBoundParameters.Remove("Name")
$solution = Az.Migrate.private\Get-AzMigrateSolution_Get @PSBoundParameters
if ($null -eq $solution)
{
throw New-AzMigrateSolutionNotFoundException `
-Name $amhSolutionName `
-ResourceGroupName $ResourceGroupName `
-ProjectName $ProjectName
}
$null = $PSBoundParameters.Remove("MigrateProjectName")
$null = $PSBoundParameters.Remove("Name")

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

# Remove common ErrorVariable and ErrorAction for get behaviors
$null = $PSBoundParameters.Remove('ErrorVariable')
$null = $PSBoundParameters.Remove('ErrorAction')

# Get protected item with ResourceGroupName, VaultName then filter
$null = $PSBoundParameters.Add("VaultName", $VaultName)

$replicatingItems = Az.Migrate.Internal\Get-AzMigrateProtectedItem @PSBoundParameters

if ($parameterSet -eq "GetByMachineName") {
Expand All @@ -269,8 +314,10 @@ function Get-AzMigrateLocalServerReplication {
return $replicatingItems
}

if (($parameterSet -eq "GetByInputObject") -or ($parameterSet -eq "GetByItemID")) {
if ($parameterSet -eq 'GetByInputObject') {
if (($parameterSet -eq "GetByInputObject") -or ($parameterSet -eq "GetByItemID"))
{
if ($parameterSet -eq 'GetByInputObject')
{
$TargetObjectID = $InputObject.Id
}

Expand All @@ -280,10 +327,15 @@ function Get-AzMigrateLocalServerReplication {
$ResourceGroupName = $objectIdArray[4] # {1}
$VaultName = $objectIdArray[8] # {2}
$ProtectedItemName = $objectIdArray[10] # {3}

# Remove common ErrorVariable and ErrorAction for get behaviors
$null = $PSBoundParameters.Remove('ErrorVariable')
$null = $PSBoundParameters.Remove('ErrorAction')

# Get protected item with ResourceGroupName, VaultName, ProtectedItemName
$null = $PSBoundParameters.Add("ResourceGroupName", $ResourceGroupName)
$null = $PSBoundParameters.Add("VaultName", $VaultName)
$null = $PSBoundParameters.Add("Name", $ProtectedItemName)

return Az.Migrate.Internal\Get-AzMigrateProtectedItem @PSBoundParameters
}
}
Expand Down
Loading
Loading